Hi Daniel, yes, that was my thought too. Thanks Mike, the wrapping defn was simply out of habit :)
On 24 May 2015 at 19:39, Daniel Kersten <[email protected]> wrote: > I would have reagent.ratom/run! dispatch events when app-db needs to be > modified and handlers would do the modification as usual. > > I originally thought about the on-changes middleware, but that has the > shortcoming that it isn't triggered when app-db changes unless the handler > doing the changing explicitly includes the middleware, which IMHO leaks > concerns all over the place (you now have to remember to add the middleware > anywhere that might cause changes you want to react to; makes generic > reusable components hard too). > > On Sun, 24 May 2015 at 19:29 Mike Thompson <[email protected]> > wrote: >> >> On Monday, May 25, 2015 at 12:13:53 AM UTC+10, Colin Yates wrote: >> > I am finding more and more use-cases for doing something when data >> > changes that aren't necessarily to do with a UI component. >> > >> > Ideally I want to do something like (outside any GUI): >> > >> > (defn my-controller-for-concern-x >> > (let [source (subscribe [:....])] >> > (do-something-when-this-changes @source))) >> > >> > and that (do-something-when-this-changes) be called whenever @source >> > changes. >> > >> > But that feels dangerous and a possible memory leak. Am I being overly >> > cautious/is there a better way? >> >> >> Only event handlers can change app-db, so the most natural way to achieve >> this is via middleware. >> >> For example, here is middleware that watches multiple parts of app-db for >> changes and then does "something" (modifies another part of ap-db): >> >> https://github.com/Day8/re-frame/blob/b921fa497d169d7473c1b0124679f68f6c380208/src/re_frame/middleware.cljs#L182-L218 >> >> Your "something" will obliviously be different. If you use this method, >> then you do have to add this middleware to the right event handlers. >> >> In some cases, I can see how it would be convenient to just attach a >> single "watcher", in which case this safe (no memory leak): >> >> (let [source (subscribe [:....])] >> (reaction (something! @source))) >> >> Note: I took out the wrapping function definition you had -- I was a bit >> puzzled about the purpose of that -- perhaps I misunderstood. I assume you >> just want to setup a single watcher. And I'm guessing the something! must be >> side-effecting. >> >> -- >> 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. -- 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.
