since

С версии 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

Аргументы

  1. config: Объект конфигурации

    • from: Юнит или массив юнитов

      Разновидности:

      • событие или эффект: срабатывание этого события/эффекта будет запускать юниты to
      • стор: обновление этого стора будет запускать юниты to
      • массив юнитов: срабатывание любого из юнитов будет запускать юниты to
    • to: Юнит или массив юнитов

      Разновидности:

      • событие или эффект: при срабатывании from будет вызван данный юнит
      • стор: при срабатывании from состояние юнита будет обновлено
      • массив юнитов: при срабатывании from будут запущены все юниты

Возвращает

Subscription: Функция отмены подписки, после её вызова реактивная связь между from и to разрушается

info

Массивы юнитов поддерживаются с 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. Перевод документации на другие языки осуществляется сообществом по мере наличия сил и желания.

Помните, что переведенные статьи могут быть неактуальными, поэтому для получения наиболее точной и актуальной информации рекомендуем использовать оригинальную англоязычную версию документации.

Соавторы