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 <[email protected]> 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 [email protected].
> > > To post to this group, send email to [email protected].
> > > 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 [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