【发布时间】:2016-02-25 12:05:16
【问题描述】:
我正在开发一个带有 ListView 的 react 本机应用程序,用户可以对其进行排序。该应用程序也经常轮询新数据。数据是一个对象数组,从应用程序获取的一些 JSON 中解析出来。
但是,该列表实际上不会在这两种情况下都更新。
我在克隆ListView.DataSource 之前已经记录了该数组,而该数组实际上是我所期望的。不过DataSource 似乎不想更新。
我已经尝试过深度克隆阵列,但无济于事。
这里有一些示例代码来演示我正在尝试做的事情。
我的 ListViewDataSource 的初始化:
constructor(props) {
super(props);
var ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => (r1.value !== r2.value)
});
this.state = {
dataSource: ds,
sorting: 'availableCapacity',
sortingOptions: ['name', 'availableCapacity']
}
}
刷新/排序数组并将其克隆到数据源 (由按下按钮或拉入新数据时触发)
refreshList(sortBy) {
if (sortBy === undefined)
sortBy = this.state.sortBy;
var array = this.props.dataToSortAndDisplay;
if (sortBy == 'option1')
array.sort(this.sortByVar1);
else if (sortBy == 'option2') {
array.sort(this.sortByVar2);
}
this.setState({
dataSource: this.state.dataSource.cloneWithRows(array)
})
}
我尝试像这样深度克隆我的数组,但无济于事:
cloneData(data) {
if (data instanceof Array || data instanceof Object) {
var newData = [];
for (var k in data) {
newData[k] = this.cloneData(data[k]);
}
return newData;
}
else {
return data;
}
}
我还尝试使用 JSON.parse(JSON.stringify(array)) 对其进行深度克隆,因为数据首先只是解析为 JSON。也无济于事。
有人可以指出我在这里做错了什么吗? 我很沮丧,无法做像更新 ListView 这样简单的事情。
提前致谢。
【问题讨论】:
-
可以展示list ire数据源的初始化吗?
-
您好,感谢您的回答!我在我的问题中添加了一些代码。
标签: javascript listview react-native