首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clojurescript/函数的试剂不起作用

clojurescript/函数的试剂不起作用
EN

Stack Overflow用户
提问于 2016-06-02 20:25:07
回答 2查看 300关注 0票数 4

我最近正在为我的clojurescript项目使用试剂和reagent,我有一个问题:所以我有html自定义标记。

代码语言:javascript
复制
<question id="1"></question>
<question id="2"></question>

并且我想使用cljs for function将它们交换到我的试剂生成的html中。

代码语言:javascript
复制
(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函数的情况下通过

代码语言:javascript
复制
(reagent/render [mypanel]
     (aget (.getElementsByTagName js/document "question") 0))

而且它只有一个标签就能很好地工作。

我不知道为什么for函数不起作用,还是试剂不起作用?有谁有建议吗?

我对此很不在行。

EN

回答 2

Stack Overflow用户

发布于 2016-06-02 20:34:03

for生成一个惰性序列,这意味着在需要之前不会完成评估序列的任何工作。您不能使用惰性序列来强制副作用,因为它们永远不会被评估(render就是这样一个地方)。要强制产生副作用,您可能应该将其替换为doseq。在您的例子中,dotimes可能会更好:

代码语言:javascript
复制
(let [q (.getElementsByTagName js/document "question")]
  (dotimes [i 2]
    ^{:keys i}
    (reagent/render [mypanel]
                  (aget (.getElementsByTagName js/document "question") i))))
票数 7
EN

Stack Overflow用户

发布于 2020-02-12 04:22:25

另一种选择是强制for返回的lazyseq

代码语言:javascript
复制
 (doall (for [i (range 2)]....  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37591808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档