簡體   English   中英

clojurescript/reagent for function 不起作用

[英]clojurescript/reagent for function doesn't work

我最近為我的 clojurescript 項目使用了試劑和重新框架,但我遇到了一個問題:所以我有 html 自定義標簽

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

我想使用 cljs 將它們交換到我的試劑生成的 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 函數不起作用,或者試劑不能那樣工作? 有人有建議嗎?

我在這方面很菜鳥。

for產生一個惰性序列,這意味着在需要之前不會完成任何評估序列的工作。 您不能使用惰性序列來強制產生副作用,因為它們永遠不會被評估( render就是這樣一個地方)。 為了強制副作用,您可能應該將其替換為doseq 在你的情況下, dotimes可能會更好:

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

另一種選擇可能是迫使返回lazyseq:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM