sample
Метод для связывания юнитов связью вида "при срабатывании clock
прочитать значение из source
и передать в target
"
Типичный вариант использования - когда необходимо обработать какое-либо событие используя данные из стора. Вместо использования store.getState()
, которое может вызвать несогласованность состояния, лучше использовать метод sample
#
ФормулаПри срабатывании clock
прочитать значение из source
и передать в target
- Если
clock
не передан, sample будет срабатывать при каждом обновленииsource
. - Если передан
fn
, то при срабатывании передать значения изsource
иclock
в эту функцию, а вtarget
передать результат вычисления - Если
target
не передан, то sample создаст и вернёт новый юнит
#
Иллюстрация принципа работыsample({clock?, source?, fn?, target?, greedy?})
#
Основная запись метода
Аргументы
params
(Object): Объект конфигурации
clock?
: Юнит или массив юнитовРазновидности:
- событие или эффект: срабатывание этого события/эффекта будет запускать
target
- стор: обновление этого стора будет запускать
target
- массив юнитов: срабатывание любого из юнитов будет запускать
target
. Сокращение для вызова merge - поле отсутствует:
source
будет использоваться в качествеclock
- событие или эффект: срабатывание этого события/эффекта будет запускать
source?
: Юнит или массив/объект со сторамиРазновидности:
- событие или эффект: при срабатывании
clock
будет взято последнее значение с которым запускался этот юнит (перед этим он должен будет запуститься хотя бы раз) - стор: при срабатывании
clock
будет взято текущее значение этого стора - массив или объект со сторами: при срабатывании
clock
будут взяты текущие значения из заданных сторов, объединенных в объект или массив. Сокращение для вызова combine - поле отсутствует:
clock
будет использоваться в качествеsource
- событие или эффект: при срабатывании
target?
: Юнит или массив юнитовРазновидности:
- событие или эффект: при срабатывании
clock
будет вызван данный юнит - стор: при срабатывании
clock
состояние юнита будет обновлено - массив юнитов: при срабатывании
clock
будут запущены все юниты - поле отсутствует: новый юнит будет создан и возвращен в результате вызова sample. Его тип зависит от типов
clock
иsource
- событие или эффект: при срабатывании
fn?
:(sourceData, clockData) => result
Функция-обработчик, которая будет преобразовывать данные из
source
иclock
перед отправлением вtarget
, должна быть чистой. В случае отсутствия этого поля, данные изsource
будут передаваться вtarget
как естьgreedy?
:boolean
Модификатор, определяющий, будет ли
target
ожидать окончательного значенияclock
прежде чем запуститься самому. Приgreedy: false
target
будет срабатывать только раз после каждой серии идущих подряд обновлений, а приgreedy: true
,target
сработает по разу при каждом триггереclock
. Иными словами, эта опция отключает стабилизацию апдейтовclock
и вынуждает обрабатывать все промежуточные значения. Батчинг обновлений повышает общую эффективность работы системы, поэтому по умолчанию greedy установлен вfalse
note
Поддержка массивов юнитов в target
добавлена в effector 21.8.0
Возвращает
(Event | Store) - Юнит, который будет срабатывать при срабатывании clock
, если target
не передан.
Тип возвращаемого юнита зависит от типов clock
и source
#
Примерsample(source, clock, fn?): Unit
#
Альтернативная запись метода, всегда имеет неявный target
Аргументы
source
: ЮнитРазновидности:
- событие или эффект: при срабатывании
clock
будет взято последнее значение с которым запускался этот юнит (перед этим он должен будет запуститься хотя бы раз) - стор: при срабатывании
clock
будет взято текущее значение этого стора
- событие или эффект: при срабатывании
clock
: ЮнитРазновидности:
- событие или эффект: срабатывание этого события/эффекта будет запускать
target
- стор: обновление этого стора будет запускать
target
- поле отсутствует:
source
будет использоваться в качествеclock
- событие или эффект: срабатывание этого события/эффекта будет запускать
fn?
:(sourceData, clockData) => result
Функция-обработчик, которая будет преобразовывать данные из
source
иclock
перед отправлением вtarget
, должна быть чистой. В случае отсутствия этого поля, данные изsource
будут передаваться вtarget
как есть. Поскольку этот обработчик призван организовывать поток данных, следует избегать объявления в нём сайд-эффектов. Правильнее будет поместить их в эффекты или в методwatch
возвращаемого юнита
Возвращает
(Event | Store) - Юнит, который будет срабатывать при срабатывании clock
, если target
не передан.
Тип возвращаемого юнита зависит от типов clock
и source
.
#
Примерsource
#
Объекты и массивы в #
Объект со сторамиnote
Добавлено в effector 20.8.0
sample может быть вызван с объектом со сторами в source
:
#
Массив сторовnote
Добавлено в effector 20.8.0
sample может быть вызван с массивом сторов в source
:
clock
#
Массивы юнитов в note
Добавлено в effector 21.2.0
Передача массивов юнитов в clock
работает как вызов merge
target
#
Тип создаваемого Если target
не передан, то он будет создан при вызове. Тип создаваемого юнита описан в данной таблице:
clock\source | Store | Event | Effect |
---|---|---|---|
Store | Store | Event | Event |
Event | Event | Event | Event |
Effect | Event | Event | Event |
Использование таблицы:
- Выбираем тип источника
source
, это столбец - Тип
clock
- это строка - Устанавливаем соответствие между столбцом и строкой
Например:
name
#
Поле note
Добавлено в effector 20.4.0
Любой юнит в эффекторе может иметь имя, поле name
в sample позволяет указать имя создаваемому target