编写不改变 app-db 的重构事件
Writing re-frame events that do not change app-db
有些事件不会导致 app-db
发生变化。他们只更改 dom,例如:初始化自定义滚动、获取所选文本等。我应该如何在重新框架中处理它们,因为事件处理程序需要 return 一个新的应用程序- D b?我通过 returning 现有的数据库绕过,但它似乎不正确。有更好的方法吗?我的一些处理程序看起来像这样:
(re-frame/reg-event-db
:init-link-viewer
(fn [db [_ highlights]]
(utils/load-highlights highlights)
(utils/init-selection)
db))
您可以使用 reg-event-fx
函数注册一个效果处理程序,其中 return 是一个效果贴图(相对于 reg-event-db
只有 return db
).您的效果图可以是空的,并且不需要 return 一个 db
。有关详细信息,请参阅 Effects。
您可以将事件重写为:
(reg-event-fx
:init-link-viewer
(fn [db [_ highlights]]
(utils/load-highlights highlights)
(utils/init-selection)
{}))
但是您可能想更进一步,并且 return 您的副作用作为数据。这意味着您的事件处理程序很容易测试,并将事件与其副作用分离。这意味着您还需要编写和注册效果处理程序。这可能看起来像:
(reg-event-fx
:init-link-viewer
(fn [db [_ highlights]]
{:load-highlights highlights
:init-selection true}))
有些事件不会导致 app-db
发生变化。他们只更改 dom,例如:初始化自定义滚动、获取所选文本等。我应该如何在重新框架中处理它们,因为事件处理程序需要 return 一个新的应用程序- D b?我通过 returning 现有的数据库绕过,但它似乎不正确。有更好的方法吗?我的一些处理程序看起来像这样:
(re-frame/reg-event-db
:init-link-viewer
(fn [db [_ highlights]]
(utils/load-highlights highlights)
(utils/init-selection)
db))
您可以使用 reg-event-fx
函数注册一个效果处理程序,其中 return 是一个效果贴图(相对于 reg-event-db
只有 return db
).您的效果图可以是空的,并且不需要 return 一个 db
。有关详细信息,请参阅 Effects。
您可以将事件重写为:
(reg-event-fx
:init-link-viewer
(fn [db [_ highlights]]
(utils/load-highlights highlights)
(utils/init-selection)
{}))
但是您可能想更进一步,并且 return 您的副作用作为数据。这意味着您的事件处理程序很容易测试,并将事件与其副作用分离。这意味着您还需要编写和注册效果处理程序。这可能看起来像:
(reg-event-fx
:init-link-viewer
(fn [db [_ highlights]]
{:load-highlights highlights
:init-selection true}))