Yes, dumb components don't encapsulate beahvior. Indeed if you generic
behaviour you need as someone proposed to push a generic event, and the app
handles it specifically.

Khalid aka DjebbZ
@Dj3bbZ

On Fri, Mar 27, 2015 at 4:45 PM, Jamie Orchard-Hays <jamie...@gmail.com>
wrote:

> Good articles. Thanks, Mike. In my apps I think of them as "generic" and
> "specific", or something like that. IOW, I want some generic views that are
> dumb and know nothing about the app and can be used where ever I need them.
> They get composed into specific views.
>
> Jamie
>
>
> On Mar 27, 2015, at 10:12 AM, Mike Thompson <m.l.thompson...@gmail.com>
> wrote:
>
> > On Saturday, March 28, 2015 at 12:58:17 AM UTC+11, Khalid Jebbari wrote:
> >> On Friday, March 27, 2015 at 2:39:37 PM UTC+1, Jamie Orchard-Hays wrote:
> >>> Does it make sense to pass the reusable component's context as an
> argument to it? ie,
> >>>
> >>> (defn ReusableComponent [some-context] .... )
> >>>
> >>> Jamie
> >>>
> >>> On Mar 27, 2015, at 8:54 AM, Colin Yates <colin.ya...@gmail.com>
> wrote:
> >>>
> >>>> In re-frame event dispatching is handled by (dispatch [:discriminator
> detail]). A corresponding (register-handler :discriminator (fn [db [_
> detail]]) then reacts to that dispatched event.
> >>>>
> >>>> My question is how are people managing this with re-usable
> components? For example, I have a tree and when selecting a node in that
> tree something should happen. But this is where it gets all polymorphic as
> _what_ happens depends on the client who instantiated the tree. I can see
> the following ways forward:
> >>>>
> >>>> - tree is configured with a 'context' key which is combined with the
> discriminator so rather than the tree emitting :node-selected it emits
> :consumer-a-node-selected. Consumer a can then handle
> consumer-a-node-selected and consumer b can handle (go on, guess)
> consumer-b-node-selected
> >>>> - a variation on the above involving writing your own dispatching
> logic...
> >>>> - tree doesn't use dispatch as the event bus, rather it takes in an
> instance of a Protocol:
> >>>> IRespondToTree
> >>>> (on-node-select [this node])
> >>>> - tree is parameterised with a map of fns {:node-selected-fn ...} etc.
> >>>>
> >>>> How would you all handle it? (I am leaning towards the first one).
> >>>>
> >>>> --
> >>>> 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 clojurescript+unsubscr...@googlegroups.com.
> >>>> To post to this group, send email to clojurescript@googlegroups.com.
> >>>> Visit this group at http://groups.google.com/group/clojurescript.
> >>
> >> Not sure I'm going to answer the question directly, since I've never
> used re-frame, Reagent or Om. I'm just an experienced React.js developer
> VERY interested with Clojure(Script).
> >>
> >> If you want reusable components, whatever wrapper you use around React,
> here's the plan.
> >>
> >> You should create 2 types of components : dumb and smart. Dumb
> components do 2 simple things : display stuff and handle input/events. The
> way they handle should be agnostic to any kind of library and should use
> only language-level feature. Functions. So the dumb component use function
> it's been passed and call it with the input/event. The smart components
> wrap dumb components and connect to the outside world with whatever your
> stack uses (channels, events, ratoms, what not).
> >>
> >> This way your dumb components are always reusable, whatever
> stack/project they're incorporated in. They can also be displayed in a
> simple page for your graphics or HTML/CSS team to check their look. The
> smart components handle whatever logic you want to put in them. So from a
> stack/page/project to another, only the smart components change, no the
> dumb ones. This keep UI consistent and separate concerns.
> >>
> >> Hope it's clear and helpful.
> >
> >
> > I'm not sure how much this perspective applies to the Clojurescript
> wrappings, but here are further references:
> > https://medium.com/@learnreact/container-components-c0e67432e005
> > https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0
> >
> > --
> > 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 clojurescript+unsubscr...@googlegroups.com.
> > To post to this group, send email to clojurescript@googlegroups.com.
> > 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 a topic in the
> Google Groups "ClojureScript" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/clojurescript/WOGdUY79Xv4/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> clojurescript+unsubscr...@googlegroups.com.
> To post to this group, send email to clojurescript@googlegroups.com.
> 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 clojurescript+unsubscr...@googlegroups.com.
To post to this group, send email to clojurescript@googlegroups.com.
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to