Hi Mike - sure. I have a significant deadline approaching so I won't get to it for the next few days, but yep.
On 30 March 2015 at 02:54, Mike Thompson <[email protected]> wrote: > On Sunday, March 29, 2015 at 11:38:44 PM UTC+11, Colin Yates wrote: >> 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 ;). > > > Colin, any chance you can create a pared-back repo showing the issue? My > guess is that you can make it very simple by removing all use of re-frame and > just using ratoms in place of subscriptions. > > So instead of something like: > [blah (subscribe [:something])] > > you can simulate via: > [blah (reagent/atom (some data))] > > Then you can reset! blah to simulate subscription changes. > > After all, a subscription just returns something which behaves much like a > ratom. > > > -- > 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. -- 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.
