如何处理ListView排序性能?

时间:2017-01-11 10:07:30

标签: react-native react-native-listview

我有ListView显示聊天会话列表(类似于Whatsapp / Facebook Messenger),其中包含以下rowHasChanged

rowHasChanged: (r1, r2) => r1.id !== r2.id

我注意到即使我使用shouldComponentUpdate,也会重新呈现未更新的项目。

经过一些跟踪后,我发现因为我在克隆dataSource之前对项目进行了不同的排序(新消息使项目跳转到列表的顶部),rowHasChanged正在比较不同的行。这样做是有道理的。

但它是不是有一个解决方案来支持以高效的方式进行排序?在WPF中,我们有CollectionViewSource除了数据之外还收到了something to sort by,因为同样的问题(也支持过滤和其他)。

有没有人知道摆脱这些冗余渲染的方法?

1 个答案:

答案 0 :(得分:0)

您使用的是dataSource吗?

this.setState({
    dataSource: this.ds.cloneWithRows(rowData)
});

尝试这样使用:

this.setState(state => ({
    dataSource: this.state.dataSource.cloneWithRows(rowData)
}))

在第一个sutiation中,你为dataSource设置了一个新值,所以它不会使用rowHasChanged,而是像新的dataSource一样。