我增加了'喜欢'一个职位的能力。 突然反应 - 原生爬行速度为蜗牛。 即时通讯新的反应,所以不确定何时何地正确设置状态。更新状态反应本地采取永久
我应该如何正确地附加像列的能力,在listView表中?
继承人的代码...
的 '喜欢' 的文字点击是这个....
<Text onPress={this.likePost.bind(this, feeditem.post_id)}>{feeditem.likes} likes</Text>
那么 '喜欢' 功能,这是... ...
likePost(id){
if(this.state.feedData!=null){
var d = this.state.feedData;
// Find row by post_id
var ix = d.findIndex(x => x.post_id===id);
// Only set state if user hasn't already liked
if(d[ix].you_liked==0){
// Mark as liked, and increment
d[ix].you_liked=true;
d[ix].likes = parseInt(d[ix].likes)++;
// Set the state after liking
this.setState({
feedData: d,
feedList: this.state.feedList.cloneWithRows(d)
});
}
}
}
它的工作原理,它正确地更新数据,并显示在开发工具就好。然而,新视觉状态的渲染花费了一分钟。
我是否更新状态错误? setState的成本是多少?我认为反应应该是重新呈现它在虚拟DOM中看到的变化。为什么然后它看起来像它重新渲染我的整个listView。为什么超过1分钟的加载时间? (明显的内存泄漏)?
此外,是否可以只增加'DOM'上的整数而不触发重新渲染?
欣赏答案,但它不是我的问题。这是我的错,因为重新阅读我的问题,我可以看到你是如何采取这种方式....但我已经知道如何传递行ID,我甚至没有在这种情况下这样做。我在一行中点击一个文本项目。无论如何....我的问题不是如何去做,而是如何去做,所以它不需要很长时间的渲染。你的回答更新状态在我更新它的同一个地方。 (在onPress功能)。问题是为什么重新渲染下降超过100帧。另外,我是不是在我的例子中创建状态的副本? – KyleK