当前位置: 首页 > 知识库问答 >
问题:

为什么在我的React-Native FlatList中有相同键的双份?

钱峻
2023-03-14

我正在尝试获取以下endpoint处描述的对象:https://api.cosmicjs.com/v1/67302ce0-7681-11e9-8193-4bd8888ec129/objects?pretty=true

您会注意到,有一个带有唯一标识符的_id字段。

那么为什么我得到:

“警告:遇到两个具有相同密钥的子项,。密钥应该是唯一的,以便组件在更新过程中保持其标识。非唯一密钥可能会导致子项被复制和/或忽略-此行为不受支持,并可能在将来的版本中更改。”

这是我的FlatList渲染:

render() {   
    if(this.props.dataToDisplay.objects){
        console.log(typeof(this.props.dataToDisplay.objects))
        console.log(this.props.dataToDisplay.objects)
        this.props.dataToDisplay.objects.forEach((item)=>{
            console.log(item)
        })

        return (
            <View style={[{backgroundColor: this.state.backgroundColor},styles.container]}>
                <FlatList
                    data={this.props.dataToDisplay.objects}
                    keyExtractor={(item, index)=>{item._id.toString()}}
                    renderItem={({item})=>{
                        <Text id={item._id}>{item.title}</Text>
                    }}
                />
            </View>
        );
}
 else {

    return (
        <View style={[{backgroundColor: 
this.state.backgroundColor},styles.container]}>
            <Text>Loading elements.</Text>
        </View>
      );
    }
  }
}

钥匙拔出器有问题吗?我尝试使用keyExtractor={(项,索引)=

谢谢你抽出时间。

共有3个答案

祁嘉言
2023-03-14

在您的示例中,您没有任何称为“key”的属性,正是因为这个原因,您有一个错误。你应该尝试分配另一个属性,比如一个关键元素,也许是属性“_id”,它存在于你的对象中,类似于这样:

<FlatList
data={this.props.dataToDisplay.objects}
keyExtractor={(item, index) => {item._id}}
numColumns={2}
renderItem={({item})=>{
  <Text id={item._id}>{item.title}</Text>
}}
/> 
亢嘉茂
2023-03-14

而不是keydextractor={(项,索引)=

阳福
2023-03-14

keyExtractor是可以的。返回函数不是:

keyExtractor={(item, index)=>{item._id.toString()}}

通过打开大括号{}引擎需要return关键字来返回任何内容。否则它将是一个void

要么做:

keyExtractor={(item, index)=> item._id.toString()}

或:

keyExtractor={(item, index)=> { return item._id.toString()}}

renderItem方法也是如此:

renderItem={({item})=>{
           <Text id={item._id}>{item.title}</Text>
         }}

由于打开了{},因此取消了arrow函数的隐式返回,必须显式地追加它

renderItem={({item})=>{
        return <Text id={item._id}>{item.title}</Text>
         }}

顺便说一句,id不是之一

 类似资料:
  • 为什么它不打印“processTextPosition:ContainsKey”?

  • 我正在用FFProbe测试一个带有H264视频的mp4文件。我正在使用以下命令来获取帧信息。 我得到以下输出。

  • 问题内容: 我有以下代码来获取地图: 如何打印带有重复键的消息“重复键”? 问题答案: 如何打印带有重复键的消息“重复键”? 使用当前代码,您将收到消息“重复键”,其中包含至少2个实例的列表,这些实例具有与对象相同的值,例如。 如何获得对应的密钥? 到目前为止,还无法获得相应的键,当前从合并功能中获得的实际上是与相同键映射的2个值,这些值需要合并以仅保留对应键的一个值。 您的问题是 Java 9

  • 问题内容: 在以下代码中,我不明白为什么当它属于两个不同的对象时具有相同的ID? 问题答案: 我认为这是正在发生的事情: 取消引用时,将在内存中创建其副本。该存储位置由以下位置返回 由于没有引用到刚刚创建的方法的副本,因此GC将其回收,并且该内存地址再次可用 取消引用时,将在相同的内存地址(可用)中创建它的副本,您可以再次使用该地址。 第二个副本是GCd 如果您要运行一堆其他代码并再次检查实例方法

  • 我正在写一个从文件中读取行的程序。 正在使用。例如,使用的密钥是“InboundTCP”。 从缓冲读取器读取第一行时,hashmap的containsKey(key)返回false,并添加一个新条目,这是显而易见的情况。但是,如果有另一行带有键“InboundTCP”,则containskey(key)返回false。 我放置了一个断点,并看到哈希代码不同。它将作为新条目添加。对于所有其他后续读取

  • 问题内容: 我正在尝试在Eclipse中输入一对尖括号,例如“ <>”。但是,它显示为单引号和一个点,例如“’”。我尝试了几次,发现尖括号实际上位于反斜杠的位置。 为什么会这样呢?我该如何改回来? 提前致谢。 习 问题答案: 我认为这与Windows的令人讨厌的功能有关-很长时间以来,我在不同的程序(不仅仅是Eclipse)中都有类似的东西。 如果您使用的是非英语版本的Windows,则可能安装了

  • 我想创建一个包含所有价格选项的列表,并将唯一的值放在下拉列表中,所以我这样做: 此代码引发错误: 警告:遇到具有相同键的两个子项。键应该是唯一的,以便组件在更新时维护它们的标识。非唯一键可能导致重复和/或省略子键-此行为不受支持,并且可能在未来版本中更改。 从到 更新我也添加到它呈现的地方。 和SearchHandlerPrice:

  • 我试图故意制造碰撞。 所以,我有和对象。我已经覆盖了Country的和方法,以便: india.hash代码()==india2.hash代码() 根据JavaHashMap中的冲突解决方案和文章“让这个国家对象在hashmap中”的一部分,如果key1的结果等于key2上的相同操作,那么应该会有冲突。 所以,我放置断点来查看的内容,并查看它的是2。也就是说,它包含两个不同的条目,并且没有link