重新框架中的嵌套组件不更新

时间:2016-01-03 16:39:30

标签: clojurescript reagent re-frame

我正在使用重新构建单页应用。每个"页面"应用程序调用组件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成为表单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组件。

这是预期的行为吗?如果是这样,有没有更好的方法来实现我的基页/具体页面模型?

2 个答案:

答案 0 :(得分:4)

重新构建试剂文档(*)中的规则是,对于Form-2组件,外部函数和内部函数必须具有相同的参数吗?

查看第二个菜鸟错误'在this page

(*)重新取决于试剂。有关Form-1/2/3组件的文档同样适用于单独使用Reagent或使用位于Reagent之上的其他框架/库之一。

答案 1 :(得分:3)

正如Chris Murphy所指出的那样,问题在于我没有将外部参数传递给我的内部函数。 base-page的这个定义很好:

(defn base-page [& children]
  (let [user (subscribe [:current-user])]
    (fn [& children]
    (into [:div
           ; banner goes here, including @user
          ] children))