Вложенные компоненты в кадре не обновляются

Я создаю одностраничное приложение, используя перерамку. Каждая "страница" приложения вызывает компонент 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 ответа

Решение

Не является ли правилом в документации Reagent для перефреймов (*), что для компонентов Form-2 внешняя функция и внутренняя функция должны иметь одинаковые аргументы?

Проверьте вторую "ошибку новичка" на этой странице

(*) изменение кадра зависит от реагента. Документация по компонентам Form-1/2/3 в равной степени относится к использованию Reagent самостоятельно или из одной из других платформ / библиотек, расположенных поверх Reagent.

Как указал Крис Мерфи, проблема заключалась в том, что я не передавал внешние аргументы своей внутренней функции. Это определение base-page работает отлично:

(defn base-page [& children]
  (let [user (subscribe [:current-user])]
    (fn [& children]
    (into [:div
           ; banner goes here, including @user
          ] children))
Другие вопросы по тегам