Clojure列表理解和试剂的唯一值

时间:2016-12-03 10:35:33

标签: clojure list-comprehension reagent hiccup

我们假设我们的网格的值可以是0或1:

(def grid [[1 0 1]
           [1 0 0]
           [1 0 1]])

现在我想使用列表理解将grid转换为类似HTML的Hiccup格式:

(defn cell-component [is-it-1 key]
  ^{:key key} [:td (if (= is-it-1 1) {:class "is-it-1"})])


(defn grid-html []
  ([:table
   [:tbody
   (for [row grid]
      ^{:key row} [:tr 
                      (for [cell row]
                      (cell-component cell how-i-can-generate-a-index?))])]]))

该表格生成正确但我对如何为unique index制作td没有任何想法。 how-i-can-generate-a-index?应该是什么?

2 个答案:

答案 0 :(得分:0)

您只需致电gensym

(cell-component cell (gensym))

这是一种通用的方法。但是,通常最好在数据中找到一些已经提供独特差异的属性。

如果您希望看到从0开始计数的数字,那么您可以编写自己的序列生成器:

(def uniq-key (atom -1))
(defn gen-key []
  (swap! uniq-key inc)) 

上面第一次打电话给(gen-key)时,你会回来0,第二次打1等。

答案 1 :(得分:0)

我建议定义接受propschildren作为参数的试剂成分。

(defn my-li
  [:keys [a-string]]
  [:li
   a-string])

(defn my-list
  [{:keys [color]} & children]
  [:ul
   {:style {:background-color color}}
   (map-indexed #(with-meta %2 {:key %1}) children)])

(defn thelist []
  [my-list
   {:color "#ccc"}
   [my-li "one"]
   [my-li "two"]])

改编自https://github.com/reagent-project/reagent/issues/68