Краткий ответ: они представляют три уровня абстракции для регистрации обработчиков событий.
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
обработчикам передаются (и возвращаются) вся эта контекстная карта