0

我确实有一个具有renderRow()功能的 ListView 组件。我ListBountiesView呈现 ListView Row 的自定义组件还采用一个名为的道具cr,并根据cr.

问题是,当this.props.customerRelationship更改其值时,ListView 行不会得到更新。

我正在这样做:this.props.customerRelationship.points += responseJson.points;

我想ListView只有在属性更改时才会更新data,但是如何将道具移动到我的 renderRow 组件,以便它们也更新 ListView?

SuperScreen.js

renderRow(bounty) {
  const { customerRelationship } = this.props;
  return (
    <ListBountiesView
      key={bounty.id}
      bounty={bounty}
      cr={customerRelationship}
      onPress={this.openDetailsScreen}
    />
  );
}

render() {
    const { bounties } = this.props;

    return (
      <ListView
          data={bounties}
          renderRow={this.renderRow}
          loading={loading}
      />
    )
4

2 回答 2

6

dataprop 获得新的引用时,ListView 会刷新数据源:

 componentWillReceiveProps(nextProps) {
    if (nextProps.data !== this.props.data) {
      this.setState({ dataSource: this.listDataSource.clone(nextProps.data) });
    }

    if (nextProps.loading !== this.props.loading) {
      this.setLoading(nextProps.loading);
    }
  }

同样,React Native 的 ListView 会在其数据源发生变化时刷新。这在他们的 GitHub 和许多其他线程中进行了讨论。普遍接受的解决方法是创建一个新的数据数组。在您的情况下,请随时componentWillReceiveProps更改customerRelationship

于 2017-04-30T17:20:33.883 回答
0

移动你customerRelationshipbounty对象。每个都bounty应该有这个属性,然后检查它的值在rowHasChanged. 另一种方法是检查 函数customerRelationshipcomponentWillReceiveProps如果它的值更改了克隆,那么它的bounties所有子对象都有新的对象引用。

于 2017-04-30T13:32:14.157 回答