Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Estou tendo o erro " TypeError: undefined is not an object (evaluating '_this.props.foto')" (p3)

Vi a solução dada pelo Felipe (https://cursos.alura.com.br/forum/topico-estou-tendo-o-erro-typeerror-undefined-is-not-an-object-evaluating-_this-props-foto-88754) depois de ter achado a minha:

const Post = () => {
  return (
    <Fragment>
        <View>
            <View style={styles.cabecalho}>
                <Image source={require('../../resources/img/alura.jpg')}
                    style={styles.fotoDePerfil} />
                <Text>{this.foto}</Text>
            </View>
            <Image source={require('../../resources/img/alura.jpg')}
                style={styles.foto}
            />
        </View>
    </Fragment>
  );
};

O código que o Felipe apresentou passa o props como parâmetro e no text usa props.foto.usuario:

const Post = (props) => {
return(
<View>
            <View style={styles.cabecalho}>
                <Image source={require('../../resources/img/alfinete.png')}
                    style={styles.fotoDePerfil} />
                <Text>{props.foto.usuario}</Text>
            </View>
            <Image source={require('../../resources/img/alfinete.png')}
                style={styles.fotoDoPost} />
        </View>
)
}

Alguém pode explicar se há uma diferença significativa entre as duas soluções ou se ambas podem ser usadas?

2 respostas

Cristiano, boa tarde!

O primeiro caso funciona quando você possui uma propriedade dentro daquele objeto que possua o valor foto, o que não era o caso, nós estávamos recebendo ele pelo props, por isso era necessário receber ele como parâmetro

Espero ter ajudado e bons estudos!

solução!

Oi Felipe, desculpe a demora na resposta.

Então, como eu disse, aquele primeiro trecho de código foi a minha solução naquele momento. Ou seja, funciona.

Pelo que entendi da sua mensagem ele não deveria funcionar. Mas, nesse ponto do curso, adaptando para usar Fragments no lugar de Components e trocando os index.js das plataformas pelo App.js (o fornecido pelo React-native) esse código funcionou.

Só que já na lição seguinte, para acesso ao servidor, não consegui prosseguir de forma alguma com essa estrutura. E para poder acompanhar o curso desisti do Fragments e fiz pequenas alterações só para manter o App.js criado pelo React-native (abri um tópico sobre isso). Nisso deixei de usar uma constante com a função anônima e voltei ao uso de classes (tal qual o desenvolvimento do curso).

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software