Запись перекадровых событий, которые не меняют app-db
Есть определенные события, которые не приводят к app-db
меняется. Они меняют только дом, например: инициализируют пользовательскую прокрутку, получают выделенный текст и т. Д. Как мне обращаться с ними в перекадре, так как обработчик событий требует вернуть новый app-db? Я обхожусь, возвращая существующую базу данных, но это не кажется правильным. Есть ли лучший способ сделать это? Некоторые из моих обработчиков выглядят так:
(re-frame/reg-event-db
:init-link-viewer
(fn [db [_ highlights]]
(utils/load-highlights highlights)
(utils/init-selection)
db))
1 ответ
Вы можете использовать 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}))