Size: a a a

2020 October 26

DO

Dmitry Olyenyov in ☄️ effector
ага, так лучше, наверное.
источник

🦜

🦜 in ☄️ effector
Dmitry Olyenyov
А подскажите, мне надо как-то послать определённый event, дождаться пока store обновится, обработав этот event и потом вызвать определённый код. Как лучше сделать? Что-то вроде вот этого, но вынеся bindPersistAction из обработчка rehydrate event
const rehydrate = createEvent<State>("@PERSIST/REHYDRATE");

const bindPersistAction = store.watch((state) => {
 config.storage.setItem(persistKey, JSON.stringify([Date.now(), state]));
});

if (persistedState != null) {
 store.on(rehydrate, (_state, data) => {
   bindPersistAction();
   data;
 });
 rehydrate(parsedState[1]);
}
Обращение к config.storage завернуть в эффект, if вынести в guard, rehydrate тоже сделать эффектом
источник

🦜

🦜 in ☄️ effector
Dmitry Olyenyov
А подскажите, мне надо как-то послать определённый event, дождаться пока store обновится, обработав этот event и потом вызвать определённый код. Как лучше сделать? Что-то вроде вот этого, но вынеся bindPersistAction из обработчка rehydrate event
const rehydrate = createEvent<State>("@PERSIST/REHYDRATE");

const bindPersistAction = store.watch((state) => {
 config.storage.setItem(persistKey, JSON.stringify([Date.now(), state]));
});

if (persistedState != null) {
 store.on(rehydrate, (_state, data) => {
   bindPersistAction();
   data;
 });
 rehydrate(parsedState[1]);
}
const store = createStore(null)

const fxRehydrate = createEffect((state) => {
 config.storage.setItem(persistKey, JSON.stringify([Date.now(), state]));
})

guard({
 source: store,
 filter: (state) => state !== null,
 target: fxRehydrate
})
источник

DO

Dmitry Olyenyov in ☄️ effector
ок! Попробую, пасиб!
источник

DS

Dmitriy Shuleshov in ☄️ effector
Dmitry Olyenyov
ок! Попробую, пасиб!
К тому же есть готовые решения для синхронизации с ls
Например
источник

DO

Dmitry Olyenyov in ☄️ effector
О, а я написал своё т.к. effector-persist поддерживает только localStorage
источник

DO

Dmitry Olyenyov in ☄️ effector
А подскажите,
const rehydrated = createEvent("ZZ")
   store.watch((state) => {
     config.storage.setItem(persistKey, JSON.stringify([Date.now(), state]));
   });

можно ли как-то вот тут в watch получить данные какой unit вызвал обновление? Я хочу как-то проигнорирвать event rehydrated, иначе получается бесконечный цикл между двумя табами, которые по очереди пытаются обновить localStorage, получают событие что в первой вкладке localStorage обновился, сохраняем данные в store, watch ловит event rehydrated, сохраняет в localStorage, первая вкладка получает событие что в localStorage новые данные и так по кругу.. :) (Длинное описание во избежание XY Problem :) )
источник

VK

Vladislav K. in ☄️ effector
А насколько хорошая идея в .on у одного стора залезать в состояние другого store?

Не менять, а только подсмотреть
источник

NN

Nikita N. in ☄️ effector
Vladislav K.
А насколько хорошая идея в .on у одного стора залезать в состояние другого store?

Не менять, а только подсмотреть
через getState() ?
источник

c⁣

createStore<🦉>... in ☄️ effector
Vladislav K.
А насколько хорошая идея в .on у одного стора залезать в состояние другого store?

Не менять, а только подсмотреть
оч плохая
источник

VK

Vladislav K. in ☄️ effector
Nikita N.
через getState() ?
Ну да
источник

NN

Nikita N. in ☄️ effector
для этого придумали sample
источник

NN

Nikita N. in ☄️ effector
getState() не желателен
источник

c⁣

createStore<🦉>... in ☄️ effector
Vladislav K.
Ну да
источник

NN

Nikita N. in ☄️ effector
sample({ source: firstStore, clock: event or store, target: secondStore })
источник

c⁣

createStore<🦉>... in ☄️ effector
источник

VK

Vladislav K. in ☄️ effector
Да, наверное с сэмплом тоже решаемо
источник

c⁣

createStore<🦉>... in ☄️ effector
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Vladislav K.
А насколько хорошая идея в .on у одного стора залезать в состояние другого store?

Не менять, а только подсмотреть
on по сути это сокращенная версия записи сэмпла, тебе просто нужна полная

sample({
 source: {a, b},
 clock: trigger,
 fn: ({a, b}, upd) => ...,
 target: a,
})
источник

V

Vetro in ☄️ effector
Vladislav K.
Да, наверное с сэмплом тоже решаемо
Скомбинировать сторы?
источник