1

我有几个简单的 FlatLists,每个都显示部门和商店的自定义列表项。我得到每个孩子都应该有一个唯一的“关键”道具的错误,但我已经定义了一个keyExtractor并尝试将一个key道具添加到自定义列表行组件。IE

<FlatList
  style={_styles.list}
  data={this.props.divisions}
  extraData={this.state.chosenDivisionId}
  keyExtractor={this._keyExtractor}
  renderItem={this._renderDivisionItem}/>}
/>

_keyExtractor = (item, index) => item.id

_renderDivisionItem = ({ item, index }) => {
    let typedItem: DivisionData = item;
    return (
      <ShopListItem
        text={typedItem.name}
        selected={this.state.chosenDivisionId === typedItem.id}
        itemId={typedItem.id}
        key={typedItem.id} /* Have tried with and without this */
        onPress={itemId => this._updateStateForDivisionChosen(itemId)}
      />
    );
  };

为什么我仍然收到警告,我做错了什么?keyExtractor 方法在我的其他 FlatLists 上运行良好。当然,使用的 ID 是唯一的

4

2 回答 2

3

我发现了这个问题。

该应用程序使用 redux 进行状态管理,并且有问题的列表使用初始状态进行初始化。模型已经更改了两个列表的 id、fromdivisionIdshopIdto plain的属性名称id- 但我忘记在初始状态对象中更改它。因此,当数据到达之前呈现的列表时,键提取器无法id在项目上找到道具,因为它们被调用divisionIdshopId取而代之。当数据到达时,状态将被覆盖,并且键会很好地填充。

感谢您的回答,我希望这个错误可以帮助将来的人:-)

于 2017-08-02T10:44:41.963 回答
1

尝试用这个改变这一行

_keyExtractor = (item, index) => typedItem.id
于 2017-08-01T13:15:34.590 回答