34 lines
1.1 KiB
Clojure
34 lines
1.1 KiB
Clojure
(ns reagent.dom.server
|
|
(:require [cljsjs.react.dom.server]
|
|
[reagent.impl.util :as util]
|
|
[reagent.impl.template :as tmpl]
|
|
[reagent.ratom :as ratom]
|
|
[reagent.interop :refer-macros [$ $!]]))
|
|
|
|
(defonce ^:private imported nil)
|
|
|
|
(defn module []
|
|
(cond
|
|
(some? imported) imported
|
|
(exists? js/ReactDOMServer) (set! imported js/ReactDOMServer)
|
|
(exists? js/require) (or (set! imported (js/require "react-dom/server"))
|
|
(throw (js/Error.
|
|
"require('react-dom/server') failed")))
|
|
:else
|
|
(throw (js/Error. "js/ReactDOMServer is missing"))))
|
|
|
|
|
|
(defn render-to-string
|
|
"Turns a component into an HTML string."
|
|
[component]
|
|
(ratom/flush!)
|
|
(binding [util/*non-reactive* true]
|
|
($ (module) renderToString (tmpl/as-element component))))
|
|
|
|
(defn render-to-static-markup
|
|
"Turns a component into an HTML string, without data-react-id attributes, etc."
|
|
[component]
|
|
(ratom/flush!)
|
|
(binding [util/*non-reactive* true]
|
|
($ (module) renderToStaticMarkup (tmpl/as-element component))))
|