Hi Andrew - my first thought is are you *sure* your performance
problem is where you think it is? And secondly, *why* don't you want a
row to re-render - does it have side effects or is it about
performance?

1) My anecdotal evidence is that yes, a re-render happens if the
content of an observed reference data changes.
2) Don't pass the entire cursor to the row, only pass (select-keys
large-map [keys this row depends on]).

HTH.

On 25 March 2015 at 10:53, Andrew S <[email protected]> wrote:
> I am restructuring an Om app to take advantage of Reference Cursors. I am 
> doing so because my current app, which processes, manipulates and displays 
> large amounts of data several times per second, is not running so efficiently 
> and reworking it in the "old" hierarchical manner to only pass very specific 
> cursors in an attempt to minimize re-rendering is proving a logical challenge.
>
> I have read the Advanced Tutorial and it all seems quite nice. But i want 
> clarification for now on two things (might have more later):
>
> 1) Previously, an Om component would be forced to re-render if its local 
> state or its cursor into app state updated with new values, right? If either 
> of those didn't change, the component would not need to re-render. If I use 
> om/observe now, I assume that even if the cursor or the local state do *not* 
> change, the component *will* re-render if what it is observing changes, 
> right? In the Om documentation, many of the functions explicitly mention when 
> a re-render will happen, but the om/observe does not mention this.
>
> 2) Suppose I have a large map in my app state. The values in the map change 
> often but at different times. Suppose I have a table where each row reflects 
> data for a particular key/value in that map. I do not want a row to re-render 
> unless its particular key/value changes, but not other key/values in the map. 
> The actual key/value are dynamically created and removed many times during 
> the app's runtime, thus I cannot explicitly define a reference cursor for 
> each one. What is my best strategy? Without reference cursors, I could first 
> pass the map itself as a cursor to a parent component for the whole table. 
> Then I could om/build-all over the key/values for each row in the table. But 
> this causes the parent component itself to re-render when data for the rows 
> updates, even though the parent component does not care about that data -- 
> only the row components care. And if the parent re-renders, I'd think maybe 
> all the children of that parent are also re-rendering, such that all rows in 
> the table might re-render even if only one of them needs to be re-rendered? 
> These are the challenges I'm trying to work around.
>
> --
> 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