将数据放入Clojurescript试剂中的表中

时间:2015-12-03 22:17:56

标签: clojure clojurescript reagent

我正在构建一个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"))

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

1 个答案:

答案 0 :(得分:4)

您获得的警告是由于试剂需要为沿这些线创建的动态元素的唯一键值。有几种方法可以解决这个问题。您需要注意的另一件事是使用for的可能问题,因为它会生成延迟序列。虽然这在这种情况下对你有用,但它可以通过重新渲染产生微妙的问题。

我的建议是创建一个函数来渲染td元素并使用

为渲染添加前缀
^{:key (str i j)} [:td (str "Row " i ", Col " j)]

(str i j)将为每个td元素创建一个唯一键。我觉得有用的另一件事就是使用即。

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

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

还有一些关于试剂以及它如何渲染的良好文档以及一些微妙的问题'在re-frame wiki