https://effector.now.sh/en/api/effector/restore
Используется тогда, когда необходимо из ивента напрямую выставить значение в стор в обход .on
.
Аналог без restore
:
const $store = createStore('');
const event = createEvent();
$store.on(event, (_, payload) => payload);
event('my payload');
$store.watch(console.log); // 'my payload'
Применяем restore
:
const event = createEvent();
const $store = restore(event, '');
event('my payload');
$store.watch(console.log); // 'my payload'
Применяется, когда нужна нереактивная связь данных. Например, внутри редьюсера (который должен быть чистым) нам понадобилось считать данные из другого стора.
Аналог без sample
:
const $store1 = createStore([1, 2, 3]);
const $store2 = createStore([4, 5, 6]);
const event = createEvent();
$store1.on(event, (store1) => [...store1, ...$store2.getState()]); // <-- side-effect, это неправильно!
event();
$store1.watch(console.log); // [1, 2, 3, 4, 5, 6]
Применяем sample
:
const $store1 = createStore([1, 2, 3]);
const $store2 = createStore([4, 5, 6]);
const event = createEvent();
$store1.on(sample($store2, event), (store1, store2) => [...store1, ...store2]); // <-- теперь мы получаем состояние $store2 из аргумента функциии в качестве payload
event();
$store1.watch(console.log); // [1, 2, 3, 4, 5, 6]