【问题标题】:Manually watch a re-frame subscription手动观看重帧订阅
【发布时间】:2021-08-27 17:30:22
【问题描述】:

给定一个带有值:score 的重构数据库:

(def my-db {:score 0})

(re-frame.core/reg-sub ::score (fn [db] (:score db)))

(re-frame.core/reg-event-db
 ::initialize-db
 (fn [_ _] my-db))

(re-frame.core/reg-event-db
 ::set-score
 (fn [db [_ score]]
   (assoc db :score score)))

我希望我应该能够订阅 ::score 并添加观察者

> (def score-atom (re-frame.core/subscribe [::score]))

> (add-watch
   score-atom
   :whatever
   (fn [_ _ _ _] (prn "here!")))

那我应该可以触发更新了:

> (re-frame.core/dispatch [::set-score 2])
nil
> @score-atom
"here!"
2
>

与正常的 atom 行为相反,在完成外部 deref 之前,更新不会到达手表。

显然我可以用试剂应用程序包裹手表,但感觉很重。如何让手表立即触发?我宁愿不要在每次发送调度时手动取消订阅。

【问题讨论】:

    标签: clojurescript reagent re-frame


    【解决方案1】:

    如果我运行(reagent.core/flush),事情似乎会有所进展。

    【讨论】:

      【解决方案2】:

      订阅仅在取消引用时运行。它旨在在 cljs react(例如试剂)组件中取消引用,并在更新时触发重新渲染。

      【讨论】:

      • 那么,如果我在试剂应用程序之外使用 re-frame,我就是在滥用它?
      • 可能。它旨在与一些 cljs 风格的 react 一起使用。
      猜你喜欢
      • 2017-08-11
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多