2015-10-21 103 views
1

我試圖在數據更改(即通過搜索或其他事件)時重新呈現ListView。重新呈現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

我看到的問題是你用數據覆蓋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 
/> 
+0

謝謝,我現在就試試這個。 – usernames