剛在用一個(gè)listView寫的九宮格,效果要求是點(diǎn)擊每個(gè)item發(fā)生改變,我發(fā)現(xiàn)數(shù)據(jù)源變了但是狀態(tài)沒(méi)變,
最開(kāi)始我是使用一個(gè)臨時(shí)數(shù)組保存數(shù)據(jù)源,在點(diǎn)擊每個(gè)item的時(shí)候改變數(shù)據(jù)源的熟悉,這樣就做到了數(shù)據(jù)源發(fā)生變化了
這是點(diǎn)擊每個(gè)item的方法 改變數(shù)據(jù)源
event(rowData, rowId) {
array = this.state.tempDataSource; //這是淺拷貝
array[rowId].isSelect=!array[rowId].isSelect;
this.setState({
dataSource: this.state.dataSource.cloneWithRows(array),
tempDataSource: array
});
}
但是這樣做不可以,后來(lái)找原因發(fā)現(xiàn)是數(shù)據(jù)源淺拷貝的原因,每次走rowHasChanged這個(gè)方法的時(shí)候發(fā)現(xiàn)數(shù)據(jù)一樣,所以沒(méi)有改變,把數(shù)據(jù)源深拷貝就可以了,不過(guò)這樣做是對(duì)內(nèi)存是有問(wèn)題的,數(shù)據(jù)量小的話還不影響。
我使用了這就代碼 深拷貝
array = JSON.parse(JSON.stringify(this.state.tempDataSource));
其實(shí)更好的做法還是使用mobx這個(gè)庫(kù)