С версии effector 22.0.0 рекомендуется использовать sample вместо forward
.
Метод для создания связи между юнитами в декларативной форме. Отправляет обновления из одного набора юнитов в другой
Формула
declare const a: Event<T>
declare const fxA: Effect<T, any>
declare const $a: Store<T>
declare const b: Event<T>
declare const fxB: Effect<T, any>
declare const $b: Store<T>
forward({from: a, to: b})
forward({
from: fxA,
to: [b, fxB, $b]
})
forward({
from: [a, fxA, $a],
to: fxB
})
forward({
from: [a, fxA, $a],
to: [b, fxB, $b]
})
-> Subscription
from -> to
Аргументы
config
: Объект конфигурацииfrom
: Юнит или массив юнитовРазновидности:
- событие или эффект: срабатывание этого события/эффекта будет запускать юниты
to
- стор: обновление этого стора будет запускать юниты
to
- массив юнитов: срабатывание любого из юнитов будет запускать юниты
to
- событие или эффект: срабатывание этого события/эффекта будет запускать юниты
to
: Юнит или массив юнитовРазновидности:
- событие или эффект: при срабатывании
from
будет вызван данный юнит - стор: при срабатывании
from
состояние юнита будет обновлено - массив юнитов: при срабатывании
from
будут запущены все юниты
- событие или эффект: при срабатывании
Возвращает
Subscription: Функция отмены подписки, после её вызова реактивная связь между from
и to
разрушается
Массивы юнитов поддерживаются с effector 20.6.0
Для наилучшей типизации при использовании массивов юнитов, типы значений должны совпадать либо быть явно приведены к общему базису
Примеры
Сохранение в сторе данных из события
import { createStore, createEvent, forward } from "effector";
const $store = createStore(1);
const event = createEvent();
forward({
from: event,
to: $store,
});
$store.watch((state) => console.log("store changed: ", state));
// => store changed: 1
event(200);
// => store changed: 200
Создание связи между массивами юнитов
import { createEvent, forward } from "effector";
const firstSource = createEvent();
const secondSource = createEvent();
const firstTarget = createEvent();
const secondTarget = createEvent();
forward({
from: [firstSource, secondSource],
to: [firstTarget, secondTarget],
});
firstTarget.watch((e) => console.log("first target", e));
secondTarget.watch((e) => console.log("second target", e));
firstSource("A");
// => first target A
// => second target A
secondSource("B");
// => first target B
// => second target B
Документация на английском языке - самая актуальная, поскольку её пишет и обновляет команда effector. Перевод документации на другие языки осуществляется сообществом по мере наличия сил и желания.
Помните, что переведенные статьи могут быть неактуальными, поэтому для получения наиболее точной и актуальной информации рекомендуем использовать оригинальную англоязычную версию документации.