1
resposta

erro: undefined is not and object (evaluating 'liker.login')

Boa noite. Quando eu curto a foto, funciona o código. Quando vou descurtir, esse erro é apresentado no emulador. Alguém tem alguma ideia o que pode ser? Conferi com o código da aula e não vi diferença.

const largura = Dimensions.get('screen').width;

export default class Post extends Component {

    constructor(props) {
        super(props);
        this.state = { foto: this.props.foto }
        this.state.foto.likers = [,]
    }

    carregaIcone(likeada) {
        return likeada ? require('../../resources/img/s2-checked.png') : require('../../resources/img/s2.png')
    }

    like() {
        const {foto} = this.state;
        let novaLista = [];

        if (!foto.likeada) {
            novaLista = [
                ...foto.likers,
                {login: 'meuUsuario'}
            ];
        } else {
            novaLista = foto.likers.filter(liker => {
                return liker.login !== 'meuUsuario'
            });
        }

        const fotoAtualizada = {
            ...foto,
            likeada: !foto.likeada,
            likers: novaLista
        }

        this.setState({ foto: fotoAtualizada });
    }

    exibeLikes(likers) {
        if (likers.length <= 0)
            return;

        return (
            <Text>{likers.length} {likers.length > 1 ? 'curtidas' : 'curtida'}</Text>
        );
    }

    exibeLegendas(foto) {
        if (foto.comentario === '')
            return;

        return (
            <View style={styles.comentario}>
                <Text style={styles.tituloComentario}>{foto.loginUsuario}</Text>
                <Text>{foto.comentario}</Text>
            </View>
        );
    }

    render() {
        const { foto } = this.state;

        return (
            <View>
                <View style={styles.cabecalho}>
                    <Image source={{ uri: foto.urlPerfil }} style={styles.fotoDePerfil} />
                    <Text>{foto.loginUsuario}</Text>
                </View>
                <Image source={{ uri: foto.urlFoto }} style={styles.foto} />
                <TouchableOpacity onPress={this.like.bind(this)}>
                    <View style={styles.rodape}>
                        <Image style={styles.botaoDeLike} source={this.carregaIcone(foto.likeada)} />
                    </View>
                </TouchableOpacity>
                <View>
                    {this.exibeLikes(foto.likers)}
                    {this.exibeLegendas(foto)}
                </View>
            </View>
        );
    }
}
1 resposta

Ricardo, boa tarde!

Qual é o resultado caso você coloque um console.warn(this.likers) no else?

Aguardo sua resposta e bons estudos!