reactjs - 在 React Native 中使用带有 FlatList 的 keyextarctor 时出现警告
问题描述
我是 React Native 的新手,我正在学习教程。我正在使用 FlatList 来渲染组件。这是我的组件:
const HomeScreen = (props) => {
console.log("articles: ", props.articles);
return (
<View>
<FlatList
data={ props.articles }
renderItem={({item}) => <Text> {item.title}</Text>}
/>
</View>
);
}
教程中提到如果我们不使用KeyExtarctor,FlatList会抛出这个警告
VirtualizedList:缺少项目的键,请确保在每个项目上指定键属性或提供自定义 keyExtractor。
我没有看到任何这样的警告。该教程已经很老了,所以我想知道这个问题在最新版本的 React Native 中是否仍然存在?
解决方案
<FlatList
data={ props.articles }
keyExtractor={(item) => item.id.toString()} // it is implemented like this
renderItem={({item}) => <Text> {item.title}</Text>}
/>
您的props.articles
数组项应该具有一个key
或一个唯一属性以将其分配给键。
keyExtractor
需要通过跟踪项目的重新排序来避免重新创建列表。
很重要的一点
React 总是使用唯一的键来跟踪组件中的更新。默认情况下,FlatList 要么查找自定义 keyExtractor 实现,要么查找key
数据项中命名的字段,否则它使用array index
key 的值。id 是响应中的唯一值,可用于实现 keyExtractor
推荐阅读
- cassandra - 如果发生节点故障,数据将如何同步
- arrays - 将 Pytorch 的张量元素转换为“float”类型而不是“double”类型
- java - 基于GSON中字段名的同类型序列化,无注解
- python - ffpyplayer ImportError:导入播放器时DLL加载失败
- django - 在 django 中获取与选定外键相关的项目
- java - Java Spring 规范嵌套连接条件
- amazon-web-services - VPC 终端节点无法连接到共享 AWS 账户中的 S3
- python - 基于键将字典值组合在一起
- ios - 使用 BlueSocket 框架通过 TCP 发送的不完整图像
- interface - gfortan 模糊接口的问题