Hi all, I have read the docs but might have overlooked something.
I keep seeing components being updated in response to state changes but I don't
see the latest state in that component.
For example, in the following:
(defn- make-rows
[on-click selected-id]
(js/console.log "rows has selected-id: " selected-id)
[:tbody
(for [idx (range 10)]
[:tr
{:class (when (= selected-id idx) "selected")
:on-click #(do (on-click idx) nil)}
[:td "Some state"]])])
(defn make-table []
(let [selected-id (subscribe [:search/selected-journey-id])]
(fn []
(js/console.log "make-table has selected-id: " @selected-id)
[table/table {:headers [{:class :ignore-me :text "whatever"}]
:rows (make-rows #(dispatch [:search/select-journey-id
%])
@selected-id)}])))
when I call [make-table] then I can see both make-table and make-rows being
called with the new selected-id, but table/table never gets the new
selected-id, it is always called with the old selected-id. It is as if the
invocation to (rows) is cached.
Changing make-table to use [make-rows] makes the problem worse as only
make-tables is called in response to the selected-id changing.
The only way I can get this to work is to make-rows itself subscribe to the
selected-id:
(defn- make-rows
[on-click]
(let [selected-id (subscribe [:search/selected-journey-id])]
(fn []
(js/console.log "rows has selected-id: " @selected-id)
[:tbody
(for [idx (range 10)]
[:tr
{:class (when (= @selected-id idx) "selected")
:on-click #(do (on-click idx) nil)}
[:td "Some state"]])])))
(defn make-table []
[table/table {:headers [{:class :ignore-me :text "whatever"}]
:rows [make-rows #(dispatch [:search/select-journey-id
%])]}])
Can somebody please explain why calling an fn with a @subscription is the wrong
thing to do.
Thanks for reading this far ;).
--
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.