【问题标题】:What is the difference between reg-event-db, reg-event-fx and reg-event-ctx in Re-frame?Re-frame 中的 reg-event-db、reg-event-fx 和 reg-event-ctx 有什么区别?
【发布时间】:2019-02-25 10:30:49
【问题描述】:

Re-frame 中有 3 个事件 fns,我可以对 reg-event-dbreg-event-fx 做同样的事情。

reg-event-dbreg-event-fxreg-event-ctx 的主要区别是什么?

我什么时候应该使用reg-event-fx 而不是reg-event-db,反之亦然。

【问题讨论】:

    标签: clojure clojurescript reagent re-frame


    【解决方案1】:

    简短回答:它们代表注册事件处理程序的三个抽象级别。

    reg-event-dbreg-event-fx 的一个更专注、更有限的版本。当您的处理程序只关心db 值时,reg-event-db 是最方便使用的;您可以使用reg-event-fx 编写相同的处理程序,但您必须从处理程序的输入中获取:db 值。这是注册事件处理程序的最常见情况。

    如果您的处理程序需要访问共同效果/产生效果,那么您将使用reg-event-fx 并从处理程序的输入中获取:coeffects 值(以及:db,如果需要)。一个常见的用例是当您需要访问浏览器存储(例如 cookie、本地存储)但希望您的处理程序没有副作用时。文档中有一个example

    reg-event-ctx 是一种更低级别的事件处理程序,它接收整个context,但这很少是您想要用来注册事件处理程序的。来自文档:This form of registration is almost never used.

    这是一个示例上下文映射:

    {:coeffects {:event [:some-id :some-param]
                 :db    <original contents of app-db>}
    
     :effects   {:db    <new value for app-db>
                 :dispatch  [:an-event-id :param1]}
    
     :queue     <a collection of further interceptors>
     :stack     <a collection of interceptors already walked>}
    
    • reg-event-db 处理程序仅被赋予:coeffects -&gt; :db 值,并且它们的返回值通知:effects -&gt; :db
    • reg-event-fx 处理程序被赋予整个 :coeffects 值,它们的返回值通知 :effects
    • reg-event-ctx 处理程序被传递(并返回)整个上下文映射

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 2015-07-03
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多