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