Re-frame中的reg-event-db、reg-event-fx和reg-event-ctx有什么区别?
What is the difference between reg-event-db, reg-event-fx and reg-event-ctx in Re-frame?
在Re-frame中有3个事件fns,我可以用reg-event-db
和reg-event-fx
。
reg-event-db
、reg-event-fx
和 reg-event-ctx
之间的主要区别是什么?
我什么时候应该使用 reg-event-fx
而不是 reg-event-db
,反之亦然。
简短回答:它们代表注册事件处理程序的三个抽象级别。
reg-event-db
是 reg-event-fx
的更集中、更有限的版本。当您的处理程序只关心 db
值时,那么 reg-event-db
使用起来最方便;您可以使用 reg-event-fx
编写相同的处理程序,但您必须从处理程序的输入中获取 :db
值。这是注册事件处理程序的最常见情况。
如果您的处理程序需要访问 co-effects/produce 效果,那么您将使用 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 -> :db
值,它们的 return 值通知 :effects -> :db
reg-event-fx
处理程序被赋予整个 :coeffects
值,并且它们的 return 值通知 :effects
reg-event-ctx
处理程序被传递(和 return)整个上下文映射
在Re-frame中有3个事件fns,我可以用reg-event-db
和reg-event-fx
。
reg-event-db
、reg-event-fx
和 reg-event-ctx
之间的主要区别是什么?
我什么时候应该使用 reg-event-fx
而不是 reg-event-db
,反之亦然。
简短回答:它们代表注册事件处理程序的三个抽象级别。
reg-event-db
是 reg-event-fx
的更集中、更有限的版本。当您的处理程序只关心 db
值时,那么 reg-event-db
使用起来最方便;您可以使用 reg-event-fx
编写相同的处理程序,但您必须从处理程序的输入中获取 :db
值。这是注册事件处理程序的最常见情况。
如果您的处理程序需要访问 co-effects/produce 效果,那么您将使用 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 -> :db
值,它们的 return 值通知:effects -> :db
reg-event-fx
处理程序被赋予整个:coeffects
值,并且它们的 return 值通知:effects
reg-event-ctx
处理程序被传递(和 return)整个上下文映射