Event
Event (событие, эвент) это декларация намерения сделать что-либо: запустить вычисления, отправить сообщение другой секции приложения или обновить состояния в приложении. Одна из основных управляющих сущностей, при срабатывании запускает цепочки реактивных вычислений в приложении. Является юнитом
События можно вызывать как обычные функции (императивный вызов) а также подключать в различные методы api включая sample, guard и split (декларативное подключение). При императивном вызове принимают максимум один аргумент и всегда возвращают переданные данные
#
СтруктураМетоды
- map: создает производное событие на основе данных из исходного
- prepend: создает событие-триггер для преобразования данных перед запуском исходного эвента
- filterMap: создает производное событие на основе данных из исходного с возможностью отмены вызова
- watch: вызывает функцию с сайд-эффектами при каждом срабатывании события
Свойства
#
Примеры- map - пример использования map
- prepend - пример использования prepend
- filterMap - использование nullable react ref с filterMap
- watch - пример использования watch
#
Методы#
mapСоздает производное событие на основе данных из исходного
#
ФормулаПри вызове исходного события eventA
, функция-обработчик fn
будет вызвана с поступившими данными, после чего производный эвент eventB
будет вызван с результатом вычислений
#
Аргументыfn
:(data: T) => S
Функция-обработчик, которая будет вычислять данные для передачи в производное событие
eventB
на основе данных из исходного эвентаeventA
. Должна быть чистойАргументы
data
: Данные с которыми сработало исходное событиеeventA
Возвращает
Данные для передачи в производное событие
eventB
#
ВозвращаетНовое, производное событие
#
Примеры#
Пример использования map#
prependСоздаёт событие-триггер для преобразования данных перед запуском исходного эвента. По сравнению с map, работает в обратном направлении
#
ФормулаПри вызове события trigger
, функция-обработчик fn
будет вызвана с поступившими данными, после чего эвент targetEvent
будет вызван с результатом вычислений
#
Аргументыfn
:(data: T) => S
Функция-обработчик, которая будет вычислять данные для передачи в исходное событие
targetEvent
на основе данных эвентаtrigger
. Должна быть чистойАргументы
data
: Данные с которыми сработало событиеtrigger
Возвращает
Данные для передачи в исходное событие
targetEvent
#
ВозвращаетНовое событие
#
Примеры#
Пример использования prepend#
filterMapСоздает производное событие на основе данных из исходного с возможностью отмены вызова
note
Метод добавлен в effector 20.0.0
#
ФормулаПри вызове исходного события eventA
, функция-обработчик fn
будет вызвана с поступившими данными, после чего, если функция вернула не undefined, производный эвент eventB
будет вызван с результатом вычислений
note
Если требуется только фильтрация вызовов без трансформации данных, то оптимальнее использовать guard
#
Аргументыfn
:(data: T) => S | void
Функция-обработчик, которая будет вычислять данные для передачи в производное событие
eventB
на основе данных из исходного эвентаeventA
. Должна быть чистойАргументы
data
: Данные с которыми сработало исходное событиеeventA
Возвращает
Данные для передачи в производное событие
eventB
либо undefined, если вызовeventB
не требуется
#
ВозвращаетНовое, производное событие
#
Примеры#
Использование nullable react ref с filterMapnote
Методы modal.showModal и modal.close - стандартные возможности dom-элемента <dialog>
Статья в MDN про showModal
#
watchВызывает функцию с сайд-эффектами при каждом срабатывании события
#
Формула#
Аргументыwatcher
:(data: T) => any
Функция с сайд-эффектами, в качестве первого аргумента получает значение с которым было вызвано событие. Возвращаемое значение не используется
#
ВозвращаетSubscription: Функция отмены подписки, после её вызова watcher
перестаёт получать обновления и удаляется из памяти. Повторные вызовы функции отмены подписки не делают ничего
#
Примеры#
Пример использования watch#
Свойства#
shortNameИмя события. Задаётся либо явно, через поле name
в createEvent, либо автоматически через babel plugin. Используется для обработки сущностей программно, например при использовании хуков домена
#
Формула#
sidСтабильный идентификатор события. Задаётся автоматически через babel-plugin
#
Формула#
Дополнительные методы#
filterСоздает производное событие с возможностью отмены вызова
note
Более гибким способом фильтрации является guard, рекомендуется использовать именно его
#
ФормулаПри вызове исходного события eventA
, функция-обработчик fn
будет вызвана с поступившими данными, после чего, если функция вернула истинное значение, производный эвент eventB
будет вызван с теми же данными
#
Аргументыconfig
: Объект конфигурацииfn
:(data: T) => boolean
Функция-предикат, которая определяет необходимость вызова производного события
eventB
возвращая истинное значение,должна быть чистой
#
ВозвращаетНовое, производное событие
note
Объектная форма аргумента используется потому что event.filter(fn) был сокращённой формой filterMap