mirror of https://github.com/status-im/reagent.git
Add support for UNSAFE_ lifecycle methods & use for impl and tests
This commit is contained in:
parent
2f4f9ac0eb
commit
2f9e91d697
|
@ -3,8 +3,11 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@cljs-oss/module-deps": "1.1.1",
|
"@cljs-oss/module-deps": "1.1.1",
|
||||||
"prop-types": "15.6.2",
|
"prop-types": "15.6.2",
|
||||||
"react": "16.8.6",
|
"react": "16.9.0",
|
||||||
"react-dom": "16.8.6"
|
"react-dom": "16.9.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "lein figwheel client-npm"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"gzip-size-cli": "3.0.0",
|
"gzip-size-cli": "3.0.0",
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
;; If :npm-deps enabled, these are used only for externs.
|
;; If :npm-deps enabled, these are used only for externs.
|
||||||
;; Without direct react dependency, other packages,
|
;; Without direct react dependency, other packages,
|
||||||
;; like react-leaflet might have closer dependency to a other version.
|
;; like react-leaflet might have closer dependency to a other version.
|
||||||
[cljsjs/react "16.8.6-0"]
|
[cljsjs/react "16.9.0-0"]
|
||||||
[cljsjs/react-dom "16.8.6-0"]
|
[cljsjs/react-dom "16.9.0-0"]
|
||||||
[cljsjs/react-dom-server "16.8.6-0"]]
|
[cljsjs/react-dom-server "16.9.0-0"]]
|
||||||
|
|
||||||
:plugins [[lein-cljsbuild "1.1.7"]
|
:plugins [[lein-cljsbuild "1.1.7"]
|
||||||
[lein-doo "0.1.11"]
|
[lein-doo "0.1.11"]
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
{:npm-deps {"react" "16.8.6"
|
{:npm-deps {"react" "16.9.0"
|
||||||
"react-dom" "16.8.6"}}
|
"react-dom" "16.9.0"}}
|
||||||
|
|
|
@ -167,10 +167,16 @@
|
||||||
(fn getInitialState [c]
|
(fn getInitialState [c]
|
||||||
(reset! (state-atom c) (.call f c c)))
|
(reset! (state-atom c) (.call f c c)))
|
||||||
|
|
||||||
|
;; Deprecated - warning in 16.9 will work through 17.x
|
||||||
:componentWillReceiveProps
|
:componentWillReceiveProps
|
||||||
(fn componentWillReceiveProps [nextprops]
|
(fn componentWillReceiveProps [nextprops]
|
||||||
(this-as c (.call f c c (props-argv c nextprops))))
|
(this-as c (.call f c c (props-argv c nextprops))))
|
||||||
|
|
||||||
|
;; Deprecated - will work in 17.x
|
||||||
|
:UNSAFE_componentWillReceiveProps
|
||||||
|
(fn componentWillReceiveProps [nextprops]
|
||||||
|
(this-as c (.call f c c (props-argv c nextprops))))
|
||||||
|
|
||||||
:shouldComponentUpdate
|
:shouldComponentUpdate
|
||||||
(fn shouldComponentUpdate [nextprops nextstate]
|
(fn shouldComponentUpdate [nextprops nextstate]
|
||||||
(or util/*always-update*
|
(or util/*always-update*
|
||||||
|
@ -188,14 +194,21 @@
|
||||||
noargv (.call f c c (get-argv c) (props-argv c nextprops))
|
noargv (.call f c c (get-argv c) (props-argv c nextprops))
|
||||||
:else (.call f c c old-argv new-argv))))))
|
:else (.call f c c old-argv new-argv))))))
|
||||||
|
|
||||||
|
;; Deprecated - warning in 16.9 will work through 17.x
|
||||||
:componentWillUpdate
|
:componentWillUpdate
|
||||||
(fn componentWillUpdate [nextprops]
|
(fn componentWillUpdate [nextprops]
|
||||||
(this-as c (.call f c c (props-argv c nextprops))))
|
(this-as c (.call f c c (props-argv c nextprops))))
|
||||||
|
|
||||||
|
;; Deprecated - will work in 17.x
|
||||||
|
:UNSAFE_componentWillUpdate
|
||||||
|
(fn componentWillUpdate [nextprops]
|
||||||
|
(this-as c (.call f c c (props-argv c nextprops))))
|
||||||
|
|
||||||
:componentDidUpdate
|
:componentDidUpdate
|
||||||
(fn componentDidUpdate [oldprops]
|
(fn componentDidUpdate [oldprops]
|
||||||
(this-as c (.call f c c (props-argv c oldprops))))
|
(this-as c (.call f c c (props-argv c oldprops))))
|
||||||
|
|
||||||
|
;; Deprecated - warning in 16.9 will work through 17.x
|
||||||
:componentWillMount
|
:componentWillMount
|
||||||
(fn componentWillMount []
|
(fn componentWillMount []
|
||||||
(this-as c
|
(this-as c
|
||||||
|
@ -203,6 +216,14 @@
|
||||||
(when-not (nil? f)
|
(when-not (nil? f)
|
||||||
(.call f c c))))
|
(.call f c c))))
|
||||||
|
|
||||||
|
;; Deprecated - will work in 17.x
|
||||||
|
:UNSAFE_componentWillMount
|
||||||
|
(fn componentWillMount []
|
||||||
|
(this-as c
|
||||||
|
(set! (.-cljsMountOrder c) (batch/next-mount-count))
|
||||||
|
(when-not (nil? f)
|
||||||
|
(.call f c c))))
|
||||||
|
|
||||||
:componentDidMount
|
:componentDidMount
|
||||||
(fn componentDidMount []
|
(fn componentDidMount []
|
||||||
(this-as c (.call f c c)))
|
(this-as c (.call f c c)))
|
||||||
|
@ -230,18 +251,26 @@
|
||||||
;; Though the value is nil here, the wrapper function will be
|
;; Though the value is nil here, the wrapper function will be
|
||||||
;; added to class to manage Reagent ratom lifecycle.
|
;; added to class to manage Reagent ratom lifecycle.
|
||||||
(def obligatory {:shouldComponentUpdate nil
|
(def obligatory {:shouldComponentUpdate nil
|
||||||
:componentWillMount nil
|
;; Handled in add-oblifatory fn
|
||||||
|
; :componentWillMount nil
|
||||||
:componentWillUnmount nil})
|
:componentWillUnmount nil})
|
||||||
|
|
||||||
(def dash-to-camel (util/memoize-1 util/dash-to-camel))
|
(def dash-to-method-name (util/memoize-1 util/dash-to-method-name))
|
||||||
|
|
||||||
(defn camelify-map-keys [fun-map]
|
(defn camelify-map-keys [fun-map]
|
||||||
(reduce-kv (fn [m k v]
|
(reduce-kv (fn [m k v]
|
||||||
(assoc m (-> k dash-to-camel keyword) v))
|
(assoc m (-> k dash-to-method-name keyword) v))
|
||||||
{} fun-map))
|
{} fun-map))
|
||||||
|
|
||||||
(defn add-obligatory [fun-map]
|
(defn add-obligatory [fun-map]
|
||||||
(merge obligatory fun-map))
|
(merge obligatory
|
||||||
|
;; If fun map contains the old name, without UNSAFE_ prefix, use that
|
||||||
|
;; name, so user will get a warning. If no method use UNSAFE_ method
|
||||||
|
;; for Reagent implementation.
|
||||||
|
(if (contains? fun-map :componentWillMount)
|
||||||
|
nil
|
||||||
|
{:UNSAFE_componentWillMount nil})
|
||||||
|
fun-map))
|
||||||
|
|
||||||
(defn wrap-funs [fmap]
|
(defn wrap-funs [fmap]
|
||||||
(when (dev?)
|
(when (dev?)
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
(if (named? k)
|
(if (named? k)
|
||||||
(if-some [k' (cache-get prop-name-cache (name k))]
|
(if-some [k' (cache-get prop-name-cache (name k))]
|
||||||
k'
|
k'
|
||||||
(let [v (util/dash-to-camel k)]
|
(let [v (util/dash-to-prop-name k)]
|
||||||
(gobj/set prop-name-cache (name k))
|
(gobj/set prop-name-cache (name k))
|
||||||
v))
|
v))
|
||||||
k))
|
k))
|
||||||
|
@ -78,7 +78,7 @@
|
||||||
(if (named? k)
|
(if (named? k)
|
||||||
(if-some [k' (cache-get custom-prop-name-cache (name k))]
|
(if-some [k' (cache-get custom-prop-name-cache (name k))]
|
||||||
k'
|
k'
|
||||||
(let [v (util/dash-to-camel k)]
|
(let [v (util/dash-to-prop-name k)]
|
||||||
(gobj/set custom-prop-name-cache (name k) v)
|
(gobj/set custom-prop-name-cache (name k) v)
|
||||||
v))
|
v))
|
||||||
k))
|
k))
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
(string/upper-case s)
|
(string/upper-case s)
|
||||||
(str (string/upper-case (subs s 0 1)) (subs s 1))))
|
(str (string/upper-case (subs s 0 1)) (subs s 1))))
|
||||||
|
|
||||||
(defn dash-to-camel [dashed]
|
(defn dash-to-prop-name [dashed]
|
||||||
(if (string? dashed)
|
(if (string? dashed)
|
||||||
dashed
|
dashed
|
||||||
(let [name-str (name dashed)
|
(let [name-str (name dashed)
|
||||||
|
@ -37,6 +37,14 @@
|
||||||
name-str
|
name-str
|
||||||
(apply str start (map capitalize parts))))))
|
(apply str start (map capitalize parts))))))
|
||||||
|
|
||||||
|
(defn dash-to-method-name [dashed]
|
||||||
|
(if (string? dashed)
|
||||||
|
dashed
|
||||||
|
(let [name-str (name dashed)
|
||||||
|
name-str (string/replace name-str #"(unsafe|UNSAFE)[-_]" "UNSAFE_")
|
||||||
|
[start & parts] (string/split name-str #"-")]
|
||||||
|
(apply str start (map capitalize parts)))))
|
||||||
|
|
||||||
(defn fun-name [f]
|
(defn fun-name [f]
|
||||||
(let [n (or (and (fn? f)
|
(let [n (or (and (fn? f)
|
||||||
(or (.-displayName f)
|
(or (.-displayName f)
|
||||||
|
|
|
@ -19,6 +19,20 @@
|
||||||
(is (= "a b c d"
|
(is (= "a b c d"
|
||||||
(util/class-names "a" "b" nil ["c" "d"]))))
|
(util/class-names "a" "b" nil ["c" "d"]))))
|
||||||
|
|
||||||
|
(deftest dash-to-prop-name-test
|
||||||
|
(is (= "tabIndex" (util/dash-to-prop-name :tab-index)))
|
||||||
|
(is (= "data-foo-bar" (util/dash-to-prop-name :data-foo-bar))))
|
||||||
|
|
||||||
|
(deftest dash-to-method-name-test
|
||||||
|
(is (= "componentDidMount"
|
||||||
|
(util/dash-to-method-name :component-did-mount)))
|
||||||
|
(is (= "componentDidMount"
|
||||||
|
(util/dash-to-method-name :componentDidMount)))
|
||||||
|
(is (= "UNSAFE_componentDidMount"
|
||||||
|
(util/dash-to-method-name :unsafe-component-did-mount)))
|
||||||
|
(is (= "UNSAFE_componentDidMount"
|
||||||
|
(util/dash-to-method-name :unsafe_componentDidMount))))
|
||||||
|
|
||||||
; (simple-benchmark []
|
; (simple-benchmark []
|
||||||
; (do (util/class-names "a" "b")
|
; (do (util/class-names "a" "b")
|
||||||
; (util/class-names nil "a")
|
; (util/class-names nil "a")
|
||||||
|
|
|
@ -740,7 +740,7 @@
|
||||||
(reset! t (first args))
|
(reset! t (first args))
|
||||||
(add-args :initial-state args)
|
(add-args :initial-state args)
|
||||||
{:foo "bar"})
|
{:foo "bar"})
|
||||||
:component-will-mount
|
:UNSAFE_component-will-mount
|
||||||
(fn [& args]
|
(fn [& args]
|
||||||
(this-as c (is (= c (first args))))
|
(this-as c (is (= c (first args))))
|
||||||
(add-args :will-mount args))
|
(add-args :will-mount args))
|
||||||
|
@ -752,11 +752,11 @@
|
||||||
(fn [& args]
|
(fn [& args]
|
||||||
(this-as c (is (= c (first args))))
|
(this-as c (is (= c (first args))))
|
||||||
(add-args :should-update args) true)
|
(add-args :should-update args) true)
|
||||||
:component-will-receive-props
|
:UNSAFE_component-will-receive-props
|
||||||
(fn [& args]
|
(fn [& args]
|
||||||
(this-as c (is (= c (first args))))
|
(this-as c (is (= c (first args))))
|
||||||
(add-args :will-receive args))
|
(add-args :will-receive args))
|
||||||
:component-will-update
|
:UNSAFE_component-will-update
|
||||||
(fn [& args]
|
(fn [& args]
|
||||||
(this-as c (is (= c (first args))))
|
(this-as c (is (= c (first args))))
|
||||||
(add-args :will-update args))
|
(add-args :will-update args))
|
||||||
|
@ -839,7 +839,7 @@
|
||||||
(reset! oldprops (-> args first r/props))
|
(reset! oldprops (-> args first r/props))
|
||||||
(add-args :initial-state args)
|
(add-args :initial-state args)
|
||||||
{:foo "bar"})
|
{:foo "bar"})
|
||||||
:component-will-mount
|
:UNSAFE_component-will-mount
|
||||||
(fn [& args]
|
(fn [& args]
|
||||||
(this-as c (is (= c (first args))))
|
(this-as c (is (= c (first args))))
|
||||||
(add-args :will-mount args))
|
(add-args :will-mount args))
|
||||||
|
@ -851,14 +851,14 @@
|
||||||
(fn [& args]
|
(fn [& args]
|
||||||
(this-as c (is (= c (first args))))
|
(this-as c (is (= c (first args))))
|
||||||
(add-args :should-update args) true)
|
(add-args :should-update args) true)
|
||||||
:component-will-receive-props
|
:UNSAFE_component-will-receive-props
|
||||||
(fn [& args]
|
(fn [& args]
|
||||||
(reset! newprops (-> args second second))
|
(reset! newprops (-> args second second))
|
||||||
(this-as c
|
(this-as c
|
||||||
(is (= c (first args)))
|
(is (= c (first args)))
|
||||||
(add-args :will-receive (into [(dissoc (r/props c) :children)]
|
(add-args :will-receive (into [(dissoc (r/props c) :children)]
|
||||||
(:children (r/props c))))))
|
(:children (r/props c))))))
|
||||||
:component-will-update
|
:UNSAFE_component-will-update
|
||||||
(fn [& args]
|
(fn [& args]
|
||||||
(this-as c (is (= c (first args))))
|
(this-as c (is (= c (first args))))
|
||||||
(add-args :will-update args))
|
(add-args :will-update args))
|
||||||
|
|
Loading…
Reference in New Issue