更新 this.state.dataSource 不会更新 ListView
Updating this.state.dataSource doesn't update ListView
我有一个像这样的 ListView:
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderMovie}
style={styles.listView}
/>
它显示如下行:
<View style={styles.container}>
<TouchableHighlight onPress={this._onPressButton.bind(this,movie)}>
<Image
source={{uri: movie.uri}}
style={styles.thumbnail}
/>
</TouchableHighlight>
<View style={styles.rightContainer}>
<Text style={styles.title}>{movie.id}</Text>
<Text style={styles.year}>{movie.votes}</Text>
</View>
</View>
我有一个函数可以用电影 "votes" 的数量更新 this.state.dataSource。但是这些更改没有反映在 UI 中,但是当我记录 this.state.dataSource 时,更改就在那里。我是否需要以某种方式重新呈现行?他们不应该自动更改吗?
谢谢!
我有类似的情况,我唯一要做的就是:
this.setState({
dataSource: this.ds.cloneWithRows(new_data_for_datasource)
})
对我来说效果很好。
在 class 构造函数中,我有以下代码:
this.ds = new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2
})
this.state = {
dataSource: this.ds.cloneWithRows(this.props.original_data)
}
希望对您有所帮助!
要让 React-native 重新呈现行,您需要创建数组的副本,更新您的对象,然后对新创建的数组使用 setState。例如:
let newArray = this.state.dataSource.slice();
newArray[indexToUpdate] = {
...this.state.dataSource[indexToUpdate],
field: newValue,
};
this.setState({
dataSource: this.state.dataSource.cloneWithRows(newArray),
});
参考:
我正在调用一个函数来获取新数据并使用克隆选项更新列表视图,如下所示:
fetchCarData(datax) {
fetch(REQUEST_URL + '&' + 'place=' + datax)
.then((response) => response.json())
.then((responseData) => {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(responseData),
loaded: true,
});
if (responseData.notfound === 'yes') {
alert('No Vehicles found');
this.setState({
notfound: 'Not found vehicles, do another search'
})
} else {
this.setState({
notfound: ''
})
}
})
.done();
}
我有一个像这样的 ListView:
<ListView
dataSource={this.state.dataSource}
renderRow={this.renderMovie}
style={styles.listView}
/>
它显示如下行:
<View style={styles.container}>
<TouchableHighlight onPress={this._onPressButton.bind(this,movie)}>
<Image
source={{uri: movie.uri}}
style={styles.thumbnail}
/>
</TouchableHighlight>
<View style={styles.rightContainer}>
<Text style={styles.title}>{movie.id}</Text>
<Text style={styles.year}>{movie.votes}</Text>
</View>
</View>
我有一个函数可以用电影 "votes" 的数量更新 this.state.dataSource。但是这些更改没有反映在 UI 中,但是当我记录 this.state.dataSource 时,更改就在那里。我是否需要以某种方式重新呈现行?他们不应该自动更改吗?
谢谢!
我有类似的情况,我唯一要做的就是:
this.setState({
dataSource: this.ds.cloneWithRows(new_data_for_datasource)
})
对我来说效果很好。 在 class 构造函数中,我有以下代码:
this.ds = new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2
})
this.state = {
dataSource: this.ds.cloneWithRows(this.props.original_data)
}
希望对您有所帮助!
要让 React-native 重新呈现行,您需要创建数组的副本,更新您的对象,然后对新创建的数组使用 setState。例如:
let newArray = this.state.dataSource.slice();
newArray[indexToUpdate] = {
...this.state.dataSource[indexToUpdate],
field: newValue,
};
this.setState({
dataSource: this.state.dataSource.cloneWithRows(newArray),
});
参考:
我正在调用一个函数来获取新数据并使用克隆选项更新列表视图,如下所示:
fetchCarData(datax) {
fetch(REQUEST_URL + '&' + 'place=' + datax)
.then((response) => response.json())
.then((responseData) => {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(responseData),
loaded: true,
});
if (responseData.notfound === 'yes') {
alert('No Vehicles found');
this.setState({
notfound: 'Not found vehicles, do another search'
})
} else {
this.setState({
notfound: ''
})
}
})
.done();
}