5

有些事件不会导致app-db改变。他们只改变dom,例如:初始化自定义滚动,获取选定的文本等。我​​应该如何在重新框架中处理它们,因为事件处理程序需要返回一个新的app-db?我通过返回现有的数据库来解决问题,但它似乎不正确。有更好的方法吗?我的一些处理程序如下所示:

 (re-frame/reg-event-db
    :init-link-viewer
    (fn [db [_ highlights]]
      (utils/load-highlights highlights)
      (utils/init-selection)
      db))
4

1 回答 1

7

您可以使用该reg-event-fx函数注册一个效果处理程序,该处理程序返回一个效果图(而不是reg-event-db只返回db)。您的效果图可以为空,并且不需要返回db. 有关这方面的更多信息,请参阅效果

您可以将事件重写为:

(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}))
于 2016-10-19T20:55:39.720 回答