clojurescript /试剂的功能不起作用

时间:2016-06-02 12:25:07

标签: clojure clojurescript reagent re-frame

我最近在我的clojurescript项目中使用试剂和重新框架,我有一个问题: 所以我有html自定义标签

<question id="1"></question>
<question id="2"></question>

我想用cljs for function

将它们换成我的试剂生成的html
(defn mypanel []
 [:p "Hi!"])

(let [q (.getElementsByTagName js/document "question")]
  (for [i (range 2)]
    ^{:keys i}
    (reagent/render [mypanel]
                  (aget (.getElementsByTagName js/document "question") i))))

但它不起作用,我试图在不使用for函数的情况下测试它

(reagent/render [mypanel]
     (aget (.getElementsByTagName js/document "question") 0))

只用一个标签就可以了。

我不知道为什么功能不起作用,或者试剂不能这样工作?有人有建议吗?

我非常喜欢这个。

2 个答案:

答案 0 :(得分:5)

for产生一个惰性序列,这意味着在需要时不会完成评估序列的工作。你不能使用延迟序列强制副作用,因为它们永远不会被评估(render就是这样一个地方)。为了强制副作用,您应该用doseq替换它。在你的情况下,dotimes可能会更好:

(let [q (.getElementsByTagName js/document "question")]
  (dotimes [i 2]
    ^{:keys i}
    (reagent/render [mypanel]
                  (aget (.getElementsByTagName js/document "question") i))))

答案 1 :(得分:0)

另一个选择可能是强制 for 返回的lazyseq:

 (doall (for [i (range 2)]....