forward
since effector 22.0.0
core team recommends sample instead
Method to create connection between units in a declarative way. Send updates from one set of units to another
Formulae
forward({
from: Unit | Unit[],
to: Unit | Unit[]
}): Subscription
Arguments
from
(Unit | Unit[]): Source of updates. Forward will listen for changes of these units- if an Event is passed,
to
will be triggered on each event trigger and receives event argument - if a Store is passed,
to
will be triggered on each store change and receives new value of the store - if an Effect is passed,
to
will be triggered on each effect call and receives effect parameter - if an array of units is passed,
to
will be triggered when any unit infrom
array is triggered
- if an Event is passed,
to
(Unit | Unit[]): Target for updates.forward
will trigger these units with data fromfrom
Returns
Subscription: Unsubscribe function. It breaks connection between from
and to
. After call, to
will not be triggered anymore.
since
Arrays of units are supported since effector 20.6.0
Recommendation
- Arrays can contain different type of units, but their data types should match
- Use subscription with caution, because it breaks static connections and makes debug harder
Examples
Send store updates to another store
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
Forward between arrays of units
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