重新框架中的嵌套组件不更新
Nested components in re-frame not updating
我正在使用 re-frame 构建单页应用程序。应用程序的每个 "page" 调用一个组件 base-page
然后提供其页面特定的子组件...
(defn base-page [& children]
(into [:div
; banner goes here
] children))
(register-sub :count
(fn [db _] (reaction (:count @db))))
(register-handler :inc
(fn [db _] (update db :count inc)))
(defn test-page []
(let [count (subscribe [:count])]
(fn []
[base-page
[:h2 "Test Page"]
[:p (str "Count: " @count)]])))
这会使用 :count
的初始值正确呈现页面,当我 运行 (dispatch [:inc])
页面正确更新时。
现在我希望 base-page
成为一个 form-2 组件,这样它就可以拥有自己的订阅...
(defn base-page [& children]
(let [user (subscribe [:current-user])]
(fn []
(into [:div
; banner goes here, including @user
] children))
但是,当我这样做时,test-page
上的计数在 运行 (dispatch [:inc])
上不再更新。我觉得这很奇怪,因为我认为 Reagent 在幕后将 form-1 和 form-2 组件打包成 form-3 组件。
这是预期的行为吗?如果是这样,是否有更好的方法来实现我的基本 page/concrete 页面模型?
正如 Chris Murphy 所指出的,问题是我没有将外部参数传递给我的内部函数。 base-page
的这个定义工作正常:
(defn base-page [& children]
(let [user (subscribe [:current-user])]
(fn [& children]
(into [:div
; banner goes here, including @user
] children))
re-frame 试剂文档 (*) 中不是规定了 Form-2 组件的外部函数和内部函数必须具有相同的参数吗?
查看 this page
上的第二个 'rookie mistake'
(*) re-frame 取决于试剂。关于 Form-1/2/3 组件的文档同样适用于单独使用 Reagent 或使用位于 Reagent 之上的其他 frameworks/libraries 之一。
我正在使用 re-frame 构建单页应用程序。应用程序的每个 "page" 调用一个组件 base-page
然后提供其页面特定的子组件...
(defn base-page [& children]
(into [:div
; banner goes here
] children))
(register-sub :count
(fn [db _] (reaction (:count @db))))
(register-handler :inc
(fn [db _] (update db :count inc)))
(defn test-page []
(let [count (subscribe [:count])]
(fn []
[base-page
[:h2 "Test Page"]
[:p (str "Count: " @count)]])))
这会使用 :count
的初始值正确呈现页面,当我 运行 (dispatch [:inc])
页面正确更新时。
现在我希望 base-page
成为一个 form-2 组件,这样它就可以拥有自己的订阅...
(defn base-page [& children]
(let [user (subscribe [:current-user])]
(fn []
(into [:div
; banner goes here, including @user
] children))
但是,当我这样做时,test-page
上的计数在 运行 (dispatch [:inc])
上不再更新。我觉得这很奇怪,因为我认为 Reagent 在幕后将 form-1 和 form-2 组件打包成 form-3 组件。
这是预期的行为吗?如果是这样,是否有更好的方法来实现我的基本 page/concrete 页面模型?
正如 Chris Murphy 所指出的,问题是我没有将外部参数传递给我的内部函数。 base-page
的这个定义工作正常:
(defn base-page [& children]
(let [user (subscribe [:current-user])]
(fn [& children]
(into [:div
; banner goes here, including @user
] children))
re-frame 试剂文档 (*) 中不是规定了 Form-2 组件的外部函数和内部函数必须具有相同的参数吗?
查看 this page
上的第二个 'rookie mistake'(*) re-frame 取决于试剂。关于 Form-1/2/3 组件的文档同样适用于单独使用 Reagent 或使用位于 Reagent 之上的其他 frameworks/libraries 之一。