On Saturday, July 26, 2014 4:19:28 AM UTC+10, Ryan Waters wrote:
> I just started learning Reagent (after learning some Om and Reactjs).  Do 
> Reagent components map 1:1 with Reactjs components?
> 
> The code below only prints "parent done" to the console but produces no lines 
> of output for "done with child component".  It would suggest that, in the 
> end, there's only one Reactjs component even though I feel I should have 1 + 
> (length of app-state) components?
> 
> 
> 
> 
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> 
> 
> 
> (enable-console-print!)
> 
> 
> (defn by-id [id]
>   (.getElementById js/document id))
> 
> 
> (def app-state (atom (vec (for [n (range 5)] (hash-map :id n :item (str "this 
> is line " n))))))
> 
> 
> 
> 
> (defn list-item-
>   [{:keys [id item]}]
>   ^{:key id} [:div item])
> 
> 
> (def list-item
>   (with-meta list-item-
>     {:component-did-mount #(println "done with child component")}))
> 
> 
> 
> 
> (defn lister-
>   []   
>   (let [state @app-state]
>     [:div  
>       (for [x state]
>         (list-item x))]))
> 
> 
> (def lister
> 
> 
>   (with-meta lister-
>     {:component-did-mount #(println "parent done")}))
> 
> 
> (reagent/render-component [lister] (by-id "logview"))
> 
> 


You'll get what you expect, if you change:
   (list-item x)     
To:  
   [list-item x]     

This background may help:  
http://holmsand.github.io/reagent/news/any-arguments.html 

BTW: you might also prefer to use reagent/create-class over the with-meta :

(defn list-item
  [x]
  (reagent/create-class
   {:component-did-mount
    #(println "child  component-did-mount")

    :render
    (fn [_]
      [:div nil (:item x)])}))


(defn lister
  []
  (reagent/create-class
   {:component-did-mount
    #(println "lister:  component-did-mount")

    :render
    (fn [_]
      [:div  
       nil
       (for [x @app-state]
         ^{:key (:id x)}
         [list-item x])])}))


--
Mike

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to