Store
Store (стор) - это объект, который хранит значение состояния, то есть какие-либо данные. Стор обновляется при получении значения, которое не равно (!==) текущему и undefined. Является юнитом
Структура#
Методы
Свойства
- updates: дочернее событие, представляющее обновления данного стора
- defaultState: начальное состояние стора
- shortName: имя стора
- sid: стабильный идентификатор стора
Примеры#
map - пример использования map
on
reset
watch - логгирование значения стора
shortName - логгирование с помощью shortName
Методы#
map#
Создает производный стор на основе данных из исходного
Формула#
При обновлении исходного стора $first, функция-обработчик fn будет вызвана с новым состоянием $first и последним состоянием $second, результат вычислений будет сохранён в производном сторе $second, то есть реактивно обновит его значение
Аргументы#
fn:(state: T, lastState?: S) => SФункция-обработчик, которая будет вычислять новое состояние производного стора
$secondна основе значения исходного стора$first. Генерирует в том числе и исходное состояние стора, поэтому в первый раз запускается в момент вызова.map, то есть ещё до создания производного стора. Должна быть чистойАргументы
state: Текущее состояние исходного стора$firstна момент начала работыfnlastState?: Текущее состояние производного стора$secondна момент начала работыfn. Не существует при первом вызовеfn
Возвращает
Новое значение для хранения в производном сторе
$second. Если функция возвращает undefined или текущее состояние производного стора, то обновления не будет
Возвращает#
Новый, производный стор
Примеры#
Пример использования map#
on#
Обновляет состояние стора с помощью функции-обработчика при срабатывании триггера
Формула#
Аргументы#
clock: Юнит или массив юнитовТриггер начала вычисления или несколько триггеров. Для каждого триггера последний установленный обработчик будет заменять предыдущие обработчики (полезно для динамического поведения)
Разновидности:
- событие или эффект: срабатывание этого события/эффекта будет запускать обновление
$store - стор: обновление этого стора будет запускать обновление
$store - массив юнитов: срабатывание любого из юнитов будет запускать обновление
$store
- событие или эффект: срабатывание этого события/эффекта будет запускать обновление
fn:(state: T, data: S) => TФункция-обработчик, которая будет вычислять новое состояние
$storeна основе его предыдущего состояния и данных изclock, должна быть чистойАргументы
state: Текущее состояние стора на момент начала работыfndata: Данные, принятые от сработавшегоclockРазновидности, в зависимости от типа сработавшего
clock:- событие: значение, с которым было вызвано событие
- эффект: значение, с которым был вызван эффект
- стор: новое значение стора
Возвращает
Новое значение для хранения в
$store. Если функция возвращает undefined или текущее состояние стора, то обновления не будет
Возвращает#
Текущий стор
note
Поддержка массивов в clock добавлена в effector 20.15.0
Примеры#
Использование события для обновления состояния#
Использование массива юнитов в clock#
reset#
Сбрасывает состояние стора к исходному значению при срабатывании триггера
Формула#
Аргументы#
clock: Юнит или массив юнитовТриггер запуска обновления стора или несколько триггеров. Если на момент срабатывания стор уже находится в исходном состоянии, то обновления не будет
Разновидности:
- событие или эффект: срабатывание этого события/эффекта будет запускать обновление
$store - стор: обновление этого стора будет запускать обновление
$store - массив юнитов: срабатывание любого из юнитов будет запускать обновление
$store
- событие или эффект: срабатывание этого события/эффекта будет запускать обновление
Возвращает#
Текущий стор
note
Поддержка массивов в clock добавлена в effector 20.15.0
Примеры#
Использование события для сброса состояния#
Использование массива юнитов в clock#
watch#
Вызывает функцию с сайд-эффектами при каждом обновлении стора. В первый раз вызывается сразу же при создании, с текущим значением стора
Формула#
Аргументы#
watcher:(state: T) => anyФункция с сайд-эффектами, получает текущее состояние стора в качестве первого аргумента. Возвращаемое значение не используется
Возвращает#
Subscription: Функция отмены подписки, после её вызова watcher перестаёт получать обновления и удаляется из памяти. Повторные вызовы функции отмены подписки не делают ничего
Примеры#
Логгирование значения стора#
Свойства#
updates#
Дочернее событие стора, будет вызвано при каждом обновлении стора. Используется только для определения сайд-эффектов через store.updates.watch, где будут срабатывать начиная с первого обновления, в отличии от store.watch, обработчики в котором запускаются при создании немедленно
note
По мере усложнения логики проекта оптимальнее заменить на комбинацию эффекта и сэмпла
Формула#
Примеры#
Вызов сайд-эффектов начиная с первого обновления#
shortName#
Имя стора. Задаётся либо явно, через поле name в createStore, либо автоматически через babel plugin. Используется для обработки сущностей программно, например при использовании хуков домена
Формула#
Примеры#
Логгирование с помощью shortName#
defaultState#
Начальное состояние стора, то, с которым он создавался. К этому состоянию будет возвращать метод reset
Формула#
Примеры#
Пример использования defaultState#
sid#
Стабильный идентификатор стора. Задаётся автоматически через babel-plugin
Формула#
Дополнительные методы#
getState#
Возвращает текущее значение стора
getState порождает трудноотлаживаемый императивный код и состояния гонки данных
Формула#
Примеры#
Пример использования getState#
clock watch#
Сокращённая запись для описания сайд-эффекта, который необходимо запускать только при срабатывании определённого триггера и в котором необходимо как состояние стора так и данные из триггера
note
По мере усложнения логики проекта оптимальнее заменить на attach
Формула#
Аргументы#
clock: Юнит-триггерfn:(state: T, data: S) => anyФункция с сайд-эффектами. Возвращаемое значение не используется
Аргументы
state: Текущее состояние стора на момент начала работыfndata: Данные, принятые от сработавшегоclock
Возвращает#
Subscription: Функция отмены подписки
Примеры#
Пример использования#
off#
Удаляет обработчик для данного триггера, который был установлен через .on или .reset. Если для данного триггера не было обработчика, этот метод ничего не делает
Аргументы#
clock: Юнит-триггер
Возвращает#
Текущий стор
Примеры#
Пример использования off#
thru#
Вызывает функцию с заданным стором и возвращает результат как есть. Используется для последовательных трансформаций заранее описанными функциями пока в javascript не добавлен pipeline proposal
Формула#
Аргументы#
fn:(store: Store<T>) => SФункция, которая получает сам стор в аргументы и возвращает некоторое значение, должна быть чистой
Возвращает#
Любое значение, которое вернёт fn