我最近在我的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))
只用一个标签就可以了。
我不知道为什么功能不起作用,或者试剂不能这样工作?有人有建议吗?
我非常喜欢这个。
答案 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)]....