Javascript React Native ListView赢得';t在排序时或检索新数据后更新
我正在开发一个带有Javascript React Native ListView赢得';t在排序时或检索新数据后更新,javascript,listview,react-native,Javascript,Listview,React Native,我正在开发一个带有列表视图的react本机应用程序,用户可以对其进行排序。该应用程序每隔一段时间就会轮询一次新数据。数据是一个对象数组,从应用程序获取的一些JSON解析而来。 然而,这两种情况下,该列表实际上都不会更新 在克隆ListView.DataSource之前,我已经记录了该数组,而该数组实际上就是我所期望的。然而,数据源似乎不想更新 我已经尝试过深度克隆阵列,但没有成功 下面是一些示例代码来演示我要做的事情 初始化我的ListViewDataSource: constructor(pr
列表视图的react本机应用程序,用户可以对其进行排序。该应用程序每隔一段时间就会轮询一次新数据。数据是一个对象数组,从应用程序获取的一些JSON解析而来。
然而,这两种情况下,该列表实际上都不会更新
在克隆ListView.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']
}
}
刷新/排序数组并将其克隆到数据源
(按下按钮或拉入新数据时触发)
我尝试像这样深度克隆我的阵列,但没有成功:
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这样简单的事情
提前感谢。尝试在构造函数之外定义ds变量:
var ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => (r1.value !== r2.value) });
class SampleApp extends React.Component{
constructor(props) {
super(props)
this.state = {
dataSource: ds
}
}
componentDidMount() {
this.setState({ dataSource: ds.cloneWithRows(data) })
}
render() {
return (
<View style={ styles.container }>
<ListView
dataSource={ this.state.dataSource }
renderRow={ (rowData) => <Text>{ rowData }</Text> }
/>
</View>
);
}
}
vards=newlistview.DataSource({rowHasChanged:(r1,r2)=>(r1.value!==r2.value)});
类SampleApp扩展了React.Component{
建造师(道具){
超级(道具)
此.state={
数据源:ds
}
}
componentDidMount(){
this.setState({dataSource:ds.cloneWithRows(data)})
}
render(){
返回(
{rowData}}
/>
);
}
}
建立一个基本的演示。
我解决了我的问题,真的很惭愧。
问题不在于ListView。我的手机在挂载时将数据保存到状态,但在获取新道具时不会更新数据
我只是从状态中删除了数据,并在我的单元格中使用了道具。这使它按预期工作。您能显示列表ire数据源的初始化吗?嘿,谢谢您的回答!我在我的问题中添加了一些代码。这没有什么区别。但是感谢您的回答。另一个选项是,尝试在refreshList函数中重置您的数据源,如下所示:this.setState({dataSource:ds.cloneWithRows(data)})
我还更新了我的代码和示例。不幸的是,这也没有做到。我假设你肯定知道数据是从api返回的?我知道。我会在ListView中替换数据时记录数据。这实际上是我所期待的数据。如果更改其排序方式,则不会更改行。但是,它背后的数据似乎确实发生了变化,因为它在单击时显示了错误的页面。
var ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => (r1.value !== r2.value) });
class SampleApp extends React.Component{
constructor(props) {
super(props)
this.state = {
dataSource: ds
}
}
componentDidMount() {
this.setState({ dataSource: ds.cloneWithRows(data) })
}
render() {
return (
<View style={ styles.container }>
<ListView
dataSource={ this.state.dataSource }
renderRow={ (rowData) => <Text>{ rowData }</Text> }
/>
</View>
);
}
}