重新渲染ListView

时间:2015-10-21 18:53:44

标签: reactjs react-native

我试图在数据发生变化时重新渲染ListView(即通过搜索或其他一些事件)。

最初,州看起来像这样:



let source = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2})

return {
  source: source,
  loading: false
}




当我获得更新数据时,我尝试更新这样的状态:



let data = this.state.source.cloneWithRows([])
this.setState({ source: data })




在这个例子中它是一个空数组。重新渲染被触发,但ListView根本没有变化。这些项目完全相同。

我已经阅读了文档,查看了一些代码,并尝试了一些方法。到目前为止,没有任何工作。我有什么遗失的吗?

1 个答案:

答案 0 :(得分:1)

我看到的问题是你用数据覆盖了dataSource对象。我不确定ListView中的数据源是什么。 new ListView.DataSource不一定是一个州。您可以尝试以下代码

初始

this.dataSource = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2})
var source = this.dataSource.cloneWithRows(<initial source>)
this.setState({source}) // equivalent of this.setState({source : source})

下次更新

var source = this.dataSource.cloneWithRows([])
this.setState({source}) // equivalent of this.setState({source : source})

ListView组件

<ListView
 dataSource = {this.state.source}
 ... // other properties
 />