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 <[email protected]> wrote:
> Hi David,
>
> thanks for your help.
>
> On 18 Jan 2014, at 01:47, David Nolen <[email protected]> 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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.