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
на момент начала работыfn
lastState?
: Текущее состояние производного стора$second
на момент начала работыfn
. Не существует при первом вызовеfn
Возвращает
Новое значение для хранения в производном сторе
$second
. Если функция возвращает undefined или текущее состояние производного стора, то обновления не будет
#
ВозвращаетНовый, производный стор
#
Примеры#
Пример использования map#
onОбновляет состояние стора с помощью функции-обработчика при срабатывании триггера
#
Формула#
Аргументыclock
: Юнит или массив юнитовТриггер начала вычисления или несколько триггеров. Для каждого триггера последний установленный обработчик будет заменять предыдущие обработчики (полезно для динамического поведения)
Разновидности:
- событие или эффект: срабатывание этого события/эффекта будет запускать обновление
$store
- стор: обновление этого стора будет запускать обновление
$store
- массив юнитов: срабатывание любого из юнитов будет запускать обновление
$store
- событие или эффект: срабатывание этого события/эффекта будет запускать обновление
fn
:(state: T, data: S) => T
Функция-обработчик, которая будет вычислять новое состояние
$store
на основе его предыдущего состояния и данных изclock
, должна быть чистойАргументы
state
: Текущее состояние стора на момент начала работыfn
data
: Данные, принятые от сработавшего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
: Текущее состояние стора на момент начала работыfn
data
: Данные, принятые от сработавшегоclock
#
ВозвращаетSubscription: Функция отмены подписки
#
Примеры#
Пример использования#
offУдаляет обработчик для данного триггера, который был установлен через .on или .reset. Если для данного триггера не было обработчика, этот метод ничего не делает
#
Аргументыclock
: Юнит-триггер
#
ВозвращаетТекущий стор
#
Примеры#
Пример использования off#
thruВызывает функцию с заданным стором и возвращает результат как есть. Используется для последовательных трансформаций заранее описанными функциями пока в javascript не добавлен pipeline proposal
#
Формула#
Аргументыfn
:(store: Store<T>) => S
Функция, которая получает сам стор в аргументы и возвращает некоторое значение, должна быть чистой
#
ВозвращаетЛюбое значение, которое вернёт fn