某些事件不会导致app-db
更改。它们只改变dom,例如:init自定义滚动,获取所选文本等。我应该如何在重新框架中处理它们,因为事件处理程序需要返回一个新的app-db?我通过返回现有的数据库来解决这个问题,但这似乎不对。有没有更好的方法呢?我的一些处理程序看起来像这样:
(re-frame/reg-event-db
:init-link-viewer
(fn [db [_ highlights]]
(utils/load-highlights highlights)
(utils/init-selection)
db))
答案 0 :(得分:5)
您可以使用reg-event-fx
函数注册效果处理程序,该处理程序返回效果图(而reg-event-db
仅返回db
)。您的效果图可以为空,也不需要返回db
。有关详细信息,请参阅Effects。
您可以将您的活动重写为:
(reg-event-fx
:init-link-viewer
(fn [db [_ highlights]]
(utils/load-highlights highlights)
(utils/init-selection)
{}))
但是,您可能希望进一步采取此措施,并将副作用作为数据返回。这意味着您的事件处理程序很容易测试,并将事件与其副作用分离。这意味着您还需要编写和注册效果处理程序。这看起来像是:
(reg-event-fx
:init-link-viewer
(fn [db [_ highlights]]
{:load-highlights highlights
:init-selection true}))