2016-06-02 2 views
2

임 작동하지 않습니다와 나는 문제가있다 : 그래서 내가 HTML 사용자 정의 태그 clojurescript/기능을위한 시약은 최근 내 clojurescript 프로젝트 시약 및 재 프레임을 사용

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

이를 그리고 난을 교환 할 그러나이 기능이 작동하지 않습니다

(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)))) 

에 대한 cljs를 사용하여 내 시약 생성 된 HTML로, 나는

(reagent/render [mypanel] 
    (aget (.getElementsByTagName js/document "question") 0)) 
에 의해 기능에 대한 사용하지 않고 테스트하려

그리고 단 하나의 태그로 잘 작동했습니다.

나는 for 기능이 작동하지 않는 이유를 모르거나 시약이 그런 식으로 작동하지 않습니까? 누구 제안있어?

나는 이것에 아주 멍청하다.

답변

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)))) 
+0

효과가있었습니다. 알다시피, 그 부작용이 렌더링! 고마워요! –

관련 문제