Javascript 试剂不';重新加载部件,在let内部进行卸载

Javascript 试剂不';重新加载部件,在let内部进行卸载,javascript,clojure,clojurescript,reagent,re-frame,Javascript,Clojure,Clojurescript,Reagent,Re Frame,我有atomfoo: (defonce foo (r/atom "foo")) 我有一个父组件: (defn parent-component [] (js/setTimeout #(reset! foo "bar") 5000) (child-component {:foo foo})) (defn child-component [props] (let [derefed (deref (:foo props))] (fn [] [:div

我有atom
foo

(defonce foo (r/atom "foo"))
我有一个父组件:

(defn parent-component []
  (js/setTimeout #(reset! foo "bar") 5000)
  (child-component {:foo foo}))
(defn child-component [props]
  (let [derefed (deref (:foo props))]
    (fn []
      [:div
       [:p derefed]
       [:p (deref (:foo props))]])))
我有子组件:

(defn parent-component []
  (js/setTimeout #(reset! foo "bar") 5000)
  (child-component {:foo foo}))
(defn child-component [props]
  (let [derefed (deref (:foo props))]
    (fn []
      [:div
       [:p derefed]
       [:p (deref (:foo props))]])))
重置
foo
后只更新第二段


为什么会这样?

来自有关表单2组件的重新构建文档:

您需要在内部函数中再次重复外部函数参数:

(defn child-component [props]
  (fn [props]
    (let [derefed (deref (:foo props))]
      [:div
       [:p derefed]
       [:p (deref (:foo props))]])))

请注意,在使用re-frame及其订阅时,在这种情况下不必使用form-2组件: