固定列表不维护唯一列表?

时间:2018-07-25 23:23:37

标签: javascript react-native

我想知道KeyExtrator是否有助于维护唯一列表? 如果是的话,那根本对我没有帮助。

我试图在出现新项目时在平面列表上显示元素,列表只是添加它而不检查列表的唯一性

主要目标是使列表唯一,我尝试过ListView  由于使用rowHasChanged方法实现的逻辑。试图查看FlatList是否存在任何内容。

  constructor(props) {
    super(props);
    this.state = {
      TESTDATA: [{
        BarCode: '1',
        StopAddress: 'Label 1'
      }]
    };
  };

  onReceivedMessage(messages) {
    var jsondata = JSON.parse(messages)
    var dataTest = this.state.TESTDATA;
    var Data = addressToDataMap.get(dataTest.BarCodes);
    dataTest.push(jsondata);

    this.setState({
      TESTDATA: dataTest
    });
  }

<FlatList
      extraData={this.state}
        data={this.state.TESTDATA}
    keyExtractor={(item, index) => item.BarCode.toString()}
        renderItem={({ item}) => (
      <Text style={styles.baseText}>
        Stop Address: {item.StopAddress}{'\n'}
        Barcodes:    {item.BarCode}
            </Text>
        )}
/>

1 个答案:

答案 0 :(得分:0)

我想知道KeyExtrator是否有助于维护唯一列表? 否是答案

说明: keyExtractor告诉列表使用ID作为反应键,而不是默认键属性。按键可帮助React识别哪些项目已更改,添加或删除。该键还用于缓存,并用作跟踪项重新排序的反应键。这些独特的键使VirtualizedList(这是FlatList的构建基础)能够跟踪项目,并且在效率方面确实很重要。默认情况下,keyExtractor退回到使用索引。例如

<FlatList
  style={{}}
  data={this.state.FeedDataCollection}
  keyExtractor={(item, index) => item.key}
  renderItem={(rowData) =>this.RenderFeedCard(rowData)}
/>

这里item.key是关键。因此,如果要基于唯一性显示元素,则需要为此编写逻辑。 keyExtractor无法做到这一点。在https://reactjs.org/docs/lists-and-keys.html处了解更多关于React Key的信息,在https://facebook.github.io/react-native/docs/flatlist#keyextractor处了解KeyExtractor的信息