1

我正在构建一个 ClojureScript 应用程序,但在使用试剂填充数据表时遇到了问题。我遇到的两个问题是大量的表单警告

Every element in a seq should have a unique :key

而且,一旦我调用执行渲染的函数,它就会正确渲染,然后我的整个页面冻结并重新加载页面是修复它的唯一方法。这是我的两个功能:

(defn foo
  []
  [:table
   (for [i (range 10)]
     [:tr (for [j (range 3)]
            [:td (str "Row " i ", Col " j)])])])

当我调用以下命令时,我收到警告并且页面冻结,尽管它确实呈现正确:

(reagent/render [foo] (dom/getElement "results"))

我是否以错误的方式接近填写数据的过程?有没有更简单的方法?

4

1 回答 1

4

您收到的警告是由于试剂需要根据这些行创建的动态元素的唯一键值。有几种方法可以解决此问题。您需要注意的另一件事是使用 for 时可能出现的问题,因为它会生成惰性序列。虽然在这种情况下这对您有用,但它可能会在重新渲染时产生微妙的问题。

我的建议是创建一个函数来渲染 td 元素并在渲染前加上

^{:key (str i j)} [:td (str "Row " i ", Col " j)]

(str ij) 将为每个 td 元素创建一个唯一键。我觉得有用的另一件事是用于 ie

(into [:tr]
  (for [j (range 3)]
    ^{:key (str i j)} [:td ....])))

我一直在使用试剂开发自己的应用程序。这不是很好的代码,它仍然需要大量重构,但我已经完成了这样的表格以及分页表格和一些其他试剂组件,例如选项卡、侧边栏菜单等。可以在我的github arcis project如果没有别的,它应该会给你一些想法

在re-frame wiki上还有一些关于试剂及其渲染方式以及一些微妙的“陷阱”的良好文档

于 2015-12-04T02:32:34.437 回答