4

私は最近、私の 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))

タグが1つだけでうまくいきました。

そして、なぜfor関数が機能しないのか、それとも試薬がそのように機能しないのかわかりませんか? 誰か提案がありますか?

私はこれに非常に慣れていません。

4

2 に答える 2

7

for遅延シーケンスを生成します。つまり、シーケンスを評価する作業は、必要になるまで行われません。遅延シーケンスは決して評価されないため、副作用を強制するために使用することはできません (renderはそのような場所の 1 つです)。副作用を強制するには、おそらく に置き換える必要がありdoseqます。そして、あなたの場合dotimesはおそらくより良いでしょう:

(let [q (.getElementsByTagName js/document "question")]
  (dotimes [i 2]
    ^{:keys i}
    (reagent/render [mypanel]
                  (aget (.getElementsByTagName js/document "question") i))))
于 2016-06-02T12:34:03.133 に答える