我正在努力与ListView
反应本机应用程序,用户可以排序。应用程序每隔一段时间都会轮询新数据。数据是一个对象数组,从应用程序获取的某个JSON中解析出来。 但是,这两个场合都不会实际更新列表。反应原生ListView不会更新排序或检索新数据后
我在克隆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一样简单。
在此先感谢。
你可以显示列表数据源的初始化吗? –
嘿,谢谢你的回答!我在我的问题中添加了一些代码。 – stinodes