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 с filterMap#
note
Методы 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