刚在用一个listView写的九宫格,效果要求是点击每个item发生改变,我发现数据源变了但是状态没变,
最开始我是使用一个临时数组保存数据源,在点击每个item的时候改变数据源的熟悉,这样就做到了数据源发生变化了
这是点击每个item的方法 改变数据源
event(rowData, rowId) {
array = this.state.tempDataSource; //这是浅拷贝
array[rowId].isSelect=!array[rowId].isSelect;
this.setState({
dataSource: this.state.dataSource.cloneWithRows(array),
tempDataSource: array
});
}
但是这样做不可以,后来找原因发现是数据源浅拷贝的原因,每次走rowHasChanged这个方法的时候发现数据一样,所以没有改变,把数据源深拷贝就可以了,不过这样做是对内存是有问题的,数据量小的话还不影响。
我使用了这就代码 深拷贝
array = JSON.parse(JSON.stringify(this.state.tempDataSource));
其实更好的做法还是使用mobx这个库
网友评论