我有一个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>
我有一个功能,更新this.state.dataSource与电影“票”的数量.但是这些更改不会在UI中反映出来,但是当我记录了this.state.dataSource时,更改就在这里.我需要以某种方式重新渲染行吗?他们不应该自动改变吗?
谢谢!
要使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),});
参考:
> React-Native Updating List View DataSource
> ListView does not re-render a row when property of an object in datasource array is changed #4104