【发布时间】:2020-03-31 23:26:04
【问题描述】:
我遇到了一个常见错误:警告:数组或迭代器中的每个孩子都应该有一个唯一的“key”属性。
一般来说,找到有问题的代码很容易,但这次并非如此。我想知道的是正在显示的项目的关键值是什么。
(Q) 有没有办法让我查看渲染的 DOM 中每个键属性的值?
当我检查 HTML 生成的 lists react 已经呈现时,我没有看到 DOM 元素上的 key 属性(我也不希望看到它),但这就是我的我要求看看。 我可以设置一个标志来要求 React 将该键属性值添加到 DOM 以便我可以看到它吗?
这会让我看到我缺少一个键的位置,或者有两个具有相同值的键(这是我认为我遇到的问题)。见Find Duplicated Key in a complicated React component
此时,我正在采用一种有条不紊的方法,一次渲染一个项目以隔离哪个项目有问题,以便我可以归零并找到有问题的代码。
寻找解决方案
在寻找解决方案时,有几篇关于其工作原理以及为什么需要密钥的好文章,如下所示。
-
类似的问题(与我的问题相同,但没有答案)-Cant find react error which child is missing key prop
-
关于按键如何工作的优秀问题和一个很好的答案。见Understanding unique keys for array children in React.js
-
关于使用键和误用键的 ReactJS 文档。见https://reactjs.org/docs/lists-and-keys.html#extracting-components-with-keys。
-
一个帮助解决这个问题的 npm 库。见https://www.npmjs.com/package/react-key-index
-
你如何追踪重复的键 - Find Duplicated Key in a complicated React component
【问题讨论】:
-
你试过使用React DevTool吗?它会让你看到每个组件的道具。
-
您是否首先设置了密钥?听起来您正在遍历一个数组并为每个值呈现一个反应组件。看看官方文档的Lists and Keys 部分。
-
最好的解决方案是依靠一个独特的价值。如果您无法根据数据结构的任何特定属性提供它,请使用循环索引。如果由于需要移动列表中的项目而无法使用索引,则可以从数据结构中生成唯一 ID。最好是 JSON.stringify() ;)
-
@Min Lee,我没有使用 React DevTool,我会调查一下。这是否显示关键值?
-
@PatS 是的,开发工具将允许您查看所有组件的树结构以及键、道具和状态。如果您正确设置密钥,您应该能够看到它(例如:
<MyComponent key={myUniqueKey}/>)
标签: reactjs