基本FlatList代码抛出警告 - React Native

Edi*_*uza 114 react-native

FlatList似乎不起作用.我收到了这个警告.

VirtualizedList:缺少项目的键,确保在每个项目上指定键属性或提供自定义keyExtractor.

码:

<FlatList 
  data={[{name: 'a'}, {name: 'b'}]} 
  renderItem={
    (item) => <Text key={Math.random().toString()}>{item.name}</Text>
  } 
  key={Math.random().toString()} />
Run Code Online (Sandbox Code Playgroud)

Ray*_*Ray 283

只需这样做:

<FlatList 
  data={[{name: 'a'}, {name: 'b'}]} 
  renderItem={
    ({item}) => <Text>{item.name}</Text>
  } 
  keyExtractor={(item, index) => index.toString()}
/>
Run Code Online (Sandbox Code Playgroud)

来源:这里

  • 返回的索引必须是一个字符串:`keyExtractor = {(item,index)=> index.toString()}` (16认同)
  • 这可能行不通.删除并添加一些元素后,它开始显示重复的项目.我认为keyExtractor的目的是唯一一个项目.理想情况下,每个项目都应该有一个唯一的ID,并使用id作为密钥.例如keyExtractor = {item => item.id} (7认同)
  • @JustWonder-对;如果列表中要删除项目,则不能将索引用作键,而必须找到另一种为每个项目生成唯一键的方法。对于仅添加东西的情况,此方法很好。 (2认同)

小智 34

你不需要使用keyExtractor.该阵营本地文档是有点不清楚,但key性质应在的每个元素去data阵列,而不是在渲染子组件.所以而不是

<FlatList
  data={[{id: 'a'}, {id: 'b'}]}
  renderItem={({item}) => <View key={item.id} />}
/>
// React will give you a warning about there being no key prop
Run Code Online (Sandbox Code Playgroud)

这是你所期望的,你只需要keydata数组的每个元素中放置一个字段:

<FlatList
  data={[{key: 'a'}, {key: 'b'}]}
  renderItem={({item}) => <View />}
/>
// React is happy!
Run Code Online (Sandbox Code Playgroud)

绝对不要把随机字符串作为关键.

  • 不起作用.`keyExtractor`确实解决了这个问题. (4认同)

小智 13

这对我有用:

<FlatList
  data={[{name: 'a'}, {name: 'b'}]} 
  keyExtractor={(item, index) => index.toString()}
/>
Run Code Online (Sandbox Code Playgroud)


Ram*_*san 7

您可以使用

 <FlatList   
  data={[]}  
  keyExtractor={(item, index) => index.toString()} 
 />
Run Code Online (Sandbox Code Playgroud)

注意:使用index.toString()即期望为字符串.


Yog*_*nan 6

在您的数据中有一个“id”

const data = [
{
  name: 'a',
  id: 1
},
{
  name: 'b',
  id: 2
}];

<FlatList 
  data={data}
  renderItem={
    (item) => <Text>{item.name}</Text>
  } 
  keyExtractor={item => item.id}
/>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 !!!