我从这里复制了一个两年前的代码片段。现在已经可以与Figwheel一起使用,并使用了更新的Reagent/React版本。
我正在寻找一种通用的方法来隔离这个警告消息,该消息在JavaScript控制台中显示:Warning: Every element in a seq should have a unique :key
。想法是在所有组件中放置一个具有生成唯一值的:key
,然后这些警告消息应该会消失,我就可以知道哪些组件需要独特的:key
了。我的问题是即使在所有组件中都放置了独特的:key
,警告消息仍然出现。
所以,有人能告诉我错过了哪个组件或者我做错了什么吗?如你在源代码(永久链接)中看到的,我已经在第43和68行的两个组件中添加了:key (gen-key)
。
编辑 所以这就是答案(永久链接),至少就代码而言。只需要查找第44和60行处的^{:key (gen-key)}
的位置即可。
请注意,函数gen-key
是为了调试而创建的。应该替换成自然键。
你可以这样实现gen-key
:
(defn gen-key []
(gensym "key-"))
这是上述链接中提到的方法:
(def uniqkey (atom 0))
(defn gen-key []
(let [res (swap! uniqkey inc)]
(u/log res)
res))
map
而不是for
和into
,但效果相同。我已经尝试过将:key
作为元数据或作为组件的第一个参数。但根据文档无论哪种方式都没有关系。在[:polyline]
中放置了许多x y点 - 没有:key
- 也许这就是问题所在 - 我仍然在努力解决... - Chris Murphy^{:key val} [component]
而不是直接放在组件内。请注意,reagent 无法很好地处理 lazy-seq,因此您经常会看到像(into []...)
或(doall ...)
这样的内容以确保 seq 被实现。请确保使用最新的 reagent 版本,因为错误消息已经得到了一些改进。我记得上次遇到错误时看到了 reactid 的引用,所以您可以使用浏览器检查器来查看页面元素,以了解哪个组件负责该问题。 - Tim X(into [:div] (for ....))
的一般情况非常有用。我想补充一点,如果它是一个[:svg]
组件,可以用[:g]
来替代[:div]
来包含它。 - Chris Murphy