Skip to content

Instantly share code, notes, and snippets.

@DTupalov
Last active April 6, 2021 16:05
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DTupalov/45d565e34513a7f04902176da712851d to your computer and use it in GitHub Desktop.
Save DTupalov/45d565e34513a7f04902176da712851d to your computer and use it in GitHub Desktop.

restore

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

Применяется, когда нужна нереактивная связь данных. Например, внутри редьюсера (который должен быть чистым) нам понадобилось считать данные из другого стора.

Аналог без 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]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment