omcljs / om

ClojureScript interface to Facebook's React
6.66k stars 363 forks source link

dangerouslySetInnerHTML not handled in om.dom? #818

Closed petterik closed 7 years ago

petterik commented 7 years ago

When doing server side rendering of a script tag with an inline script, the contents of the inline script becomes escaped and thus broken:

(dom/render-to-str (dom/script nil "foo('bar');"))
=> "<script data-reactroot=\"\" data-reactid=\"1\" data-react-checksum=\"-1720051763\"> foo(&#x27;bar&#x27;);</script>"

To work around this we tried using the dangerouslySetInnerHTML attribute:

(dom/render-to-str (dom/script {:type "text/javascript" :dangerouslySetInnerHTML {:__html "'foo'"}}))
=> "<script type=\"text/javascript\" data-reactroot=\"\" data-reactid=\"1\" data-react-checksum=\"297998988\"></script>"

Seems like the dangerouslySetInnerHTML is not handled by om.dom?

petterik commented 7 years ago

Applied #819 and it works!

(dom/render-to-str (dom/script {:type "text/javascript" :dangerouslySetInnerHTML {:__html "'foo'"}}))
=>
"<script type=\"text/javascript\" data-reactroot=\"\" data-reactid=\"1\" data-react-checksum=\"-1726473186\">'foo'</script>"
anmonteiro commented 7 years ago

fixed https://github.com/omcljs/om/commit/16cfce778bb41da286663e0f180994069dfeebb4