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.

Reply via email to