react-native – 更新this.state.dataSource不会更新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>

我有一个功能,更新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

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...