"DOM did match" - "DOM did *not* match"

On Sat, Jan 18, 2014 at 9:41 AM, David Nolen <dnolen.li...@gmail.com> wrote:

> OK, I looked into this. First I was wrong about apply, I was a bit tired
> when I wrote that, apply works fine in this instance because the dom macros
> are also functions.
>
> Second, the reason your code doesn't work is because you can't put "div"
> tags in "p" tags. If you switch to the surround "p" tag to a "div" it will
> work just fine. I figured this out by looking at Chrome Elements Inspectors
> and saw that the DOM did match what was actually written. This is not an Om
> bug or a React bug, you just have to know that browsers do not like this
> and the DOM will be different from what React expects.
>
> David
>
>
> On Sat, Jan 18, 2014 at 9:01 AM, Samuel Aaron <samaa...@gmail.com> wrote:
>
>> Digging into this a little further...
>>
>> it seems that calling functions from the props is ok. If I re-impement
>> subdiv-color as follows:
>>
>> (defn subdiv-color []
>>   "red")
>>
>> and call it from my render-subdiv fn as follows:
>>
>> (defn render-subdiv [content] (dom/div #js{:style #js{:color
>> (subdiv-color)}} content))
>>
>> then it totally works (i.e. all the divs have a "red" colour).
>>
>> However, if I revert back to the original implementation in my example:
>>
>> (defn subdiv-color [] (rand-nth ["black" "green" "blue" "red"]))
>>
>> Then I get the behaviour previously described: it renders first time and
>> then fails the second rendering. It is possibly because the props are used
>> as part of a key for react components and therefore shouldn't be changed?
>>
>> How might I give each div a random background colour?
>>
>> Sam
>>
>> ---
>> http://sam.aaron.name
>>
>> On 18 Jan 2014, at 07:49, Samuel Aaron <samaa...@gmail.com> wrote:
>>
>> > Hi David,
>> >
>> > thanks for your help.
>> >
>> > On 18 Jan 2014, at 01:47, David Nolen <dnolen.li...@gmail.com> wrote:
>> >
>> >> (apply dom/p nil
>> >>  (map render-subdiv (:subdivs data)))
>> >>
>> >> Is not going to work. You need to put the result of map into a
>> JavaScript array. React doesn't know anything about ClojureScript sequences
>> and I don't expect it to for some time and I don't intend to magically
>> making that work in Om in the near term.
>> >
>> > Unfortunately, if I change the fn main-div to the following:
>> >
>> > (defn main-div [data owner]
>> >  (om/component
>> >   (dom/div nil
>> >            (dom/h1 nil (:title data))
>> >            (dom/p nil
>> >                   (into-array (map render-subdiv (:subdivs data)))))))
>> >
>> > Then I still see the same error - i.e. it renders correctly initially,
>> then the timer triggers the exception described previously.
>> >
>> > The mistake I was making before was treating the dom/* macros as
>> functions - which was why I was trying to apply them to a Clojure sequence.
>> I hadn't looked closely enough at the bottom of the dom ns where
>> gen-react-dom-inline-fn generates a macro for the specified tag and the
>> function-producing gen-react-dom-fn isn't ever called.
>> >
>> > I must therefore clearly be doing something else wrong. The strange
>> thing to me is that it does work for the first render - it just can't
>> handle the state being modified.
>> >
>> > Sam
>> >
>> > ---
>> > http://sam.aaron.name
>> >
>> >
>> >
>>
>> --
>> 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 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