剛在用一個(gè)listView寫的九宮格元暴,效果要求是點(diǎn)擊每個(gè)item發(fā)生改變,我發(fā)現(xiàn)數(shù)據(jù)源變了但是狀態(tà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
});
}
但是這樣做不可以吟宦,后來找原因發(fā)現(xiàn)是數(shù)據(jù)源淺拷貝的原因篮洁,每次走rowHasChanged這個(gè)方法的時(shí)候發(fā)現(xiàn)數(shù)據(jù)一樣,所以沒有改變殃姓,把數(shù)據(jù)源深拷貝就可以了袁波,不過這樣做是對內(nèi)存是有問題的,數(shù)據(jù)量小的話還不影響蜗侈。
我使用了這就代碼 深拷貝
array = JSON.parse(JSON.stringify(this.state.tempDataSource));
其實(shí)更好的做法還是使用mobx這個(gè)庫