With line 41 uncommented the following seems to happen:
1. Parent component's state changed
2. om/react "walks" the component tree in parent's render to see what should
update
3. on line 45 with om/build for the child component finds that the child
component already exists, so there is no new component created nor mounted.
4. However, "running"/calling om/build on line 45 created a new subscription to
the event-pub through :subscriber/:create-subscriber in {:init-state ...}
5. There will not be a new component created that would create a go-loop to
consume from this new subscriber channel (there's no call to om/will-mount for
a new component from line 22)
6. Now event-pub has two subscribers but only one go-loop that consumes from a
channel. The pub on :event-ch will block [1] [2]
7. Weirdness on the page
Seems you shouldn't have side-effects in the {:init-state ...} passed to
om/build. Instead pass the event-pub to the child component via :init-state and
create the sub chan together with the go-loop to consume from it.
-Gijs
[1] http://clojure.github.io/core.async/#clojure.core.async/pub
"Each item is distributed to all subs in parallel and synchronously,
i.e. each sub must accept before the next item is distributed. Use
buffering/windowing to prevent slow subs from holding up the pub."
[2] Play around with buffering in the chan on line 57 to see this behavior
change for a couple of clicks
--
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.