On Monday, November 3, 2014 3:53:45 AM UTC-6, Colin Yates wrote:
> The performance problem was due to me incorrectly mutating the data to the 
> component. Rather than:
> 
> (om/build-all child-component (map (fn [child] (assoc child :selected? (= 
> (:id child) selected-id) :selected-row-fn (fn [p] (om/set-state! owner 
> :selected-id (:id p).....)) child-data)
> 
> I now do:
> 
> (om/build-the-component data
>   {:fn (fn [p] (assoc data :selected? (= (:id child) ...))
>    :opts {:selected-row-fn (fn [p] (om/set-state! owner :selected-id (:id 
> @p)))}})
> 
> In other words, the lesson I am learning is that the cursor really wants to 
> be domain orientated and change as little as often. 
> 
> Am I right in thinking that for component instance specific immutable data 
> (e.g is it selected), use :fn. For component class level data use :opts (e.g. 
> selected callbacks). For global data there is always access to (om/root 
> {:shared...}) but that isn't applicable in this case?
> 
> Thanks.
> 
> On Sunday, 2 November 2014 23:29:19 UTC, Mike Haney  wrote:
> > Sounds like a IE8 issue.  I've never seen anything like that low 
> > performance, even on mobile.  Are you using any polyfills or shims?
> > 
> > Check out the section "Browser Support and Polyfills" here: 
> > http://facebook.github.io/react/docs/working-with-the-browser.html

a child component, when receiving data ("props") from a parent component, will 
compare the data to the data it previously received.  if the data has changed, 
the child component will re-render.  the props it receives will always have 
been passed through the function in :fn (provided to om/build or om/build-all 
in the parent component).  so any transformations in that function will always 
participate in the child component's determination to re-render (or not). for 
example, if your function in :fn assoc's a new unique id to the props every 
time it is called, the child component will re-render every time it receives 
props.

anything the child component receives in :opts is not evaluated for the 
re-render-or-not decision.  if you put values in :opts, and those values have 
changed but the props have not, the child component will not re-render.

because of this distinction in how child components process the two, it 
generally makes sense to put a callback function in :opts, and a transforming 
function in :fn.

-- 
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