O problema foi resolvido, eu estava chamando á variável foto no método de exibiLikes sem de fato estar passando essa variável com parametro export default class Post extends Component {
super(props);
this.state = {
foto: this.props.foto
}
}
carregaIcone(likeada) {
return likeada ? require('../../resources/img/s2-checked.png') :
require('../../resources/img/s2.png')
}
like() {
let novaLista = [];
if (!this.state.foto.likeada) {
novaLista = this.state.foto.likers.concat({ login: 'meuUsuario' });
}
const fotoAtualizada = {
...this.state.foto,
likeada: !this.state.foto.likeada,
likers: novaLista
}
this.setState({ foto: fotoAtualizada })
}
exibeLikes(likers) {
if (likers.length > 0) {
return (
<Text style={styles.likes}>
{foto.likers.length} {foto.likers.length > 1 ? 'curtidas' : 'curtida'}
</Text>
);
}
}
exibeComentario(foto) {
if (foto.comentario != '') {
return (
<View style={styles.comentario}>
<Text style={styles.tituloComentario}>{foto.loginUsuario}</Text>
<Text>{foto.comentario}</Text>
</View>
);
}
}
render() {
const { foto } = this.state;
return (
<View style={styles.rodape}>
<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>
{this.exibeLikes(foto.likers)}
{this.exibeComentario(foto)}
</View>
);
}
}