Hi, 

After playing a bit with om, I'm somewhat confused about state maintaining 
possibilities it offers. There is global application state and local 
component state.  I have some doubts about using local state as it seems to 
lead to troubles as soon as code grows a bit (I'm thinking about 
traditional widgets, eg. data table with editing capability - somewhat 
boring stuff, yet quite common in many cases). Most common approach to this 
seems to be to set up some local state and then use core.async channels for 
communication and updating global state asynchronousluy (go ...) blocks. 

My feeling is that it creates lots of places with application state which 
negates to some extent main premise of state handling by om. Do I need to 
use local state at all ? Are there any alternatives ? I'm thinking about 
using keyword namespacing in global state to separate concerns, for example 
viewed data table row could be kept as something like :d/current-row 
somewhere in global state ('d' stands for data) but when row editing starts 
:e/current-row appears and is used by input fields ('e' stands for 
editing). UI configuration (column descriptions etc.) would use 'u' prefix 
(eg. :u/columns) for example etc. 

My feeling is that keeping application state strictly in global state would 
make some things easier (testing+debugging UI components, recording user 
sessions in full detail by listening on :tx-listen etc.). But blindly 
following all-in-global state also can have its pitfalls that I'm not aware 
of (as cljs/reactjs/om newbie).


There are the following aspects of UI state as I see it:

- hardcoded UI config data (widget descriptions, column descriptions etc.);

- customizable UI config data (eg. skins and styles that application user 
can choose);

- UI code (function references sometimes bound somewhere to application 
state);

- UI state (eg. currently edited data, flags marking that data is being 
edited/viewed row being selected etc.)

- business data (fetched REST from backend);

- inherently stateful stuff (eg. core.async channels);

- etc. 


My question is: where would you recommend placing individual bits of 
config/data/state listed above (global state? local state? :opts ? global 
:shared ? etc.) ?

Regards,
rle


-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to