javascript - 在反应关键道具被剥离
问题描述
我正在生成一个 TSX 元素列表:
this.productsModel = this.state.products.map(o => (
<Grid.Column key>
但是,反应警告我:
警告:列表中的每个孩子都应该有一个唯一的“关键”道具。
因此,根据推荐的做法 [1],我添加:
this.productsModel = this.state.products.map((o, i) => (
<Grid.Column key={i}>
但是key={i}
在渲染时被剥离,无论元素是什么(Grid.Column
等div
)。怎么会?如何解决这个问题?
解决方案
key 元素不应该被传递给 DOM,它是一个保留的 props 仅用于 React 优化
所以当你添加像
this.productsModel = this.state.products.map((o, i) => (
<Grid.Column key={i}>
键甚至没有传递给 Grid.Column 组件,而是在实际传递所有道具时被读取剥离
您还需要为从 map 函数中返回的元素提供唯一键
为 react 提供了键来跟踪正在呈现的元素,因此如果删除了一个元素或对列表进行了排序,它不需要重新挂载所有内容,而是在其虚拟 DOM 比较期间比较正确的元素。通过这种方式,它实际上提高了性能
即使删除了警告,使用索引和键也不会提供太多好处。最好使用 products 数组中每个产品对象的唯一 ID 作为键
推荐阅读
- python - Python函数不适用于看似正确的字符串路径
- javascript - 从 ES6 类方法中获取错误“TypeError: Cannot read property 'doFileHasCorrectFileExtension' of undefined”
- c - 如何处理从 C 到 x86 程序集的参数
- javascript - 单击Javascript后如何停用按钮
- excel - 提取最小值的名称excel
- c# - 视图更改后绑定的 ComboBoxItem 变量变为空
- javascript - 为什么我的 jQuery 可以内联工作,但不能在外部工作?
- swift - 如何选择 algolia 搜索命中并将其重定向到所需的 Viewcontroller?
- sql - 如何在 DolphinDB 查询中从分布式表中消除重复记录
- javascript - 在某些站点上,MouseEvent 对象的 x 和 y 值与 Debugger API 调度的 x 和 y 值不同