gpt4 book ai didi

clojure - Re-frame 中的 reg-event-db、reg-event-fx 和 reg-event-ctx 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 17:42:57 29 4
gpt4 key购买 nike

中有3个事件fns重装 ,我可以对两者做同样的事情 reg-event-dbreg-event-fx .
reg-event-db之间的主要区别是什么, reg-event-fxreg-event-ctx ?

我应该什么时候使用 reg-event-fxreg-event-db或相反亦然。

最佳答案

简短回答:它们代表注册事件处理程序的三个抽象级别。
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 -> :db值,它们的返回值通知 :effects -> :db
  • reg-event-fx处理程序被赋予整个 :coeffects值,它们的返回值通知 :effects
  • reg-event-ctx处理程序被传递(并返回)整个上下文映射
  • 关于clojure - Re-frame 中的 reg-event-db、reg-event-fx 和 reg-event-ctx 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54864152/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com