mirror of https://github.com/status-im/reagent.git
Introduce create-element
This commit is contained in:
parent
a48e70c4de
commit
0a8bc67d5f
|
@ -11,14 +11,26 @@
|
||||||
|
|
||||||
(def is-client util/is-client)
|
(def is-client util/is-client)
|
||||||
|
|
||||||
|
(defn create-element
|
||||||
|
"Create a native React element, by calling React.createElement directly."
|
||||||
|
([type props]
|
||||||
|
(assert (not (map? props)))
|
||||||
|
(js/React.createElement type props))
|
||||||
|
([type props child]
|
||||||
|
(assert (not (map? props)))
|
||||||
|
(js/React.createElement type props child))
|
||||||
|
([type props child & children]
|
||||||
|
(assert (not (map? props)))
|
||||||
|
(apply js/React.createElement type props child children)))
|
||||||
|
|
||||||
(defn as-element
|
(defn as-element
|
||||||
"Turns a vector of Hiccup syntax into a React component. Returns form unchanged if it is not a vector."
|
"Turns a vector of Hiccup syntax into a React element. Returns form unchanged if it is not a vector."
|
||||||
[form]
|
[form]
|
||||||
(tmpl/as-element form))
|
(tmpl/as-element form))
|
||||||
|
|
||||||
(defn render
|
(defn render
|
||||||
"Render a Reagent component into the DOM. The first argument may be either a
|
"Render a Reagent component into the DOM. The first argument may be
|
||||||
vector (using Reagent's Hiccup syntax), or a React component. The second argument should be a DOM node.
|
either a vector (using Reagent's Hiccup syntax), or a React element. The second argument should be a DOM node.
|
||||||
|
|
||||||
Optionally takes a callback that is called when the component is in place.
|
Optionally takes a callback that is called when the component is in place.
|
||||||
|
|
||||||
|
|
|
@ -404,3 +404,29 @@
|
||||||
(is (found-in #"hi me" div))
|
(is (found-in #"hi me" div))
|
||||||
(is (= 1 @top-ran))
|
(is (= 1 @top-ran))
|
||||||
(is (= 4 @ran)))))))
|
(is (= 4 @ran)))))))
|
||||||
|
|
||||||
|
(defn rstr [react-elem]
|
||||||
|
(reagent/render-to-static-markup react-elem))
|
||||||
|
|
||||||
|
(deftest test-create-element
|
||||||
|
(let [ae reagent/as-element
|
||||||
|
ce reagent/create-element]
|
||||||
|
(is (= (rstr (ae [:div]))
|
||||||
|
(rstr (ce "div" nil))))
|
||||||
|
(is (= (rstr (ae [:div "foo"]))
|
||||||
|
(rstr (ce "div" nil "foo"))))
|
||||||
|
(is (= (rstr (ae [:div "foo" "bar"]))
|
||||||
|
(rstr (ce "div" nil "foo" "bar"))))
|
||||||
|
(is (= (rstr (ae [:div "foo" "bar" "foobar"]))
|
||||||
|
(rstr (ce "div" nil "foo" "bar" "foobar"))))
|
||||||
|
|
||||||
|
(is (= (rstr (ae [:div.foo "bar"]))
|
||||||
|
(rstr (ce "div" #js{:className "foo"} "bar"))))
|
||||||
|
|
||||||
|
(is (= (rstr (ae [:div [:div "foo"]]))
|
||||||
|
(rstr (ce "div" nil (ce "div" nil "foo")))))
|
||||||
|
(is (= (rstr (ae [:div [:div "foo"]]))
|
||||||
|
(rstr (ce "div" nil (ae [:div "foo"])))))
|
||||||
|
(is (= (rstr (ae [:div [:div "foo"]]))
|
||||||
|
(rstr (ae [:div (ce "div" nil "foo")]))))))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue