有3个事件FNS在重制帧,我可以做两个同样的事情reg-event-db
和reg-event-fx
。
是什么之间的主要区别reg-event-db
,reg-event-fx
和reg-event-ctx
?
我什么时候应该使用reg-event-fx
over reg-event-db
,反之亦然。
简短回答:它们代表注册事件处理程序的三个抽象级别。
reg-event-db
是reg-event-fx
. 当您的处理程序只关心db
值时,那么reg-event-db
使用起来最方便;您可以编写相同的处理程序,reg-event-fx
但您必须:db
从处理程序的输入中获取值。这是注册事件处理程序的最常见情况。
如果您的处理程序需要访问协同效应/产生效果,那么您将使用reg-event-fx
并从处理程序的输入中获取:coeffects
值(:db
如有必要)。一个常见的用例是当您需要访问浏览器存储(例如 cookie、本地存储)但希望让您的处理程序没有副作用时。文档有一个例子。
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
值,它们的返回值通知:effects -> :db
reg-event-fx
处理程序被赋予整个:coeffects
值,它们的返回值通知:effects
reg-event-ctx
处理程序被传递(并返回)整个上下文映射本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句