我最近正在为我的clojurescript项目使用试剂和reagent,我有一个问题:所以我有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))而且它只有一个标签就能很好地工作。
我不知道为什么for函数不起作用,还是试剂不起作用?有谁有建议吗?
我对此很不在行。
发布于 2016-06-02 20:34:03
for生成一个惰性序列,这意味着在需要之前不会完成评估序列的任何工作。您不能使用惰性序列来强制副作用,因为它们永远不会被评估(render就是这样一个地方)。要强制产生副作用,您可能应该将其替换为doseq。在您的例子中,dotimes可能会更好:
(let [q (.getElementsByTagName js/document "question")]
(dotimes [i 2]
^{:keys i}
(reagent/render [mypanel]
(aget (.getElementsByTagName js/document "question") i))))发布于 2020-02-12 04:22:25
另一种选择是强制for返回的lazyseq
(doall (for [i (range 2)].... https://stackoverflow.com/questions/37591808
复制相似问题