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: falsetargetбудет срабатывать только раз после каждой серии идущих подряд обновлений, а при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