В чем разница между reg-event-db, reg-event-fx и ​​reg-event-ctx в Re-frame? - PullRequest
0 голосов
/ 25 февраля 2019

Есть 3 события в Перекадрировать , я могу сделать то же самое с reg-event-db и reg-event-fx.

В чем основное различие между reg-event-db, reg-event-fx и reg-event-ctx?

Когда мне следует использовать reg-event-fx над reg-event-db или наоборот.

1 Ответ

0 голосов
/ 25 февраля 2019

Краткий ответ: они представляют три уровня абстракции для регистрации обработчиков событий.

reg-event-db - более сфокусированная, ограниченная версия reg-event-fx.Когда ваш обработчик касается только значения db, тогда reg-event-db наиболее удобно использовать;вы можете написать тот же обработчик с reg-event-fx, но вам нужно будет получить значение :db из ввода обработчика.Это наиболее распространенный случай регистрации обработчиков событий.

Если ваш обработчик должен получить доступ к побочным эффектам / производить эффекты, вы должны использовать reg-event-fx и получить значение :coeffects:db, еслинеобходимо) из ввода обработчика.Обычный случай использования - это когда вам нужен доступ к хранилищу браузера (например, файлы cookie, локальное хранилище), но вы хотите, чтобы у обработчиков не было побочных эффектов.Документы имеют пример этого.

reg-event-ctx - это обработчик событий даже более низкого уровня, который получает весь контекст , но это редковы хотите использовать для регистрации обработчика событий.Из документов: 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 значение, а их возвращаемое значение сообщает *Обработчикам 1030 *
  • reg-event-fx присваивается все значение :coeffects, а их возвращаемое значение сообщает :effects
  • reg-event-ctx обработчикам передаются (и возвращаются) вся эта контекстная карта
...