Size: a a a

2020 August 11

🦜

🦜 in ☄️ effector
from earth
А теперь такая задачка

На первом шаге есть условно кнопка "next"
По клику на неё
— если пользователь залогинен (== есть user address, считайте это айди пользователя), то направить на второй шаг
— если нет, кинуть ивент (типа address required), дождаться когда появится user address, когда появился — направить на второй шаг

Нагородил тут вот такое решение:


export const setAddress = createEvent<string | null>();
export const address = restore(setAddress, null);

export const next = createEvent();
const requireAddress = createEvent();

export const requireAddressFx = createEffect({
 handler: () => {
   requireAddress();
   const unsub = address.subscribe(value => {
     if (value) {
       next();
       unsub();
     }
   });
 },
});

export const addressDialogDismiss = createEvent();

guard({
 source: sample(address, next),
 filter: address.map(x => !x),
 target: requireAddressFx,
});

export const awaitingAddress = createStore(false)
 .on(requireAddress, () => true)
 .on(addressDialogDismiss, () => false)
 .on(address, (_, payload) => !payload);


названия мне не нравятся совсем, не хватает неймспейсинга наверное

Но основной вопрос — правильно ли делать эффект, который подписывается на стор и отписывается в коллбеке subscribe?
источник

🦜

🦜 in ☄️ effector
꧁倫太郎 岡部꧂
ну пока так
все что временно, постоянно
источник

🦜

🦜 in ☄️ effector
так что убирай
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
пока нет
источник

🦜

🦜 in ☄️ effector
я серьезно
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
я тоже
источник

🦜

🦜 in ☄️ effector
у тебя поведение будет другое с getState
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
какое?
источник

🦜

🦜 in ☄️ effector
которое ты не ожидаешь
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
какое я не ожидаю?
источник

🦜

🦜 in ☄️ effector
отправка параметров одних, а в итоге другие
источник

🦜

🦜 in ☄️ effector
потому что в момент вызова гетстейт произошел рассинхрон
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
а в attach тогда что происходит?
источник

🦜

🦜 in ☄️ effector
꧁倫太郎 岡部꧂
а в attach тогда что происходит?
посмотри на гифку в sample
источник

AO

Aleksandr Osipov in ☄️ effector
attach как и sample гарантирует тебе что получишь значение стора в консистентном состоянии, когда отработают все .on / forward - условно говоря
источник

🦜

🦜 in ☄️ effector
источник

AO

Aleksandr Osipov in ☄️ effector
с .getState ты же говоришь дай мне стейт сию минуту (в момент вызова эффекта, который в произволный момент времени вызывается вообще говоря)
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
Aleksandr Osipov
attach как и sample гарантирует тебе что получишь значение стора в консистентном состоянии, когда отработают все .on / forward - условно говоря
типо последовательность вызовов будет нормальной?
источник

AO

Aleksandr Osipov in ☄️ effector
я не про последовательность, а про состояние стора, которое в случае с attach / sample всегда будет в ожидаемом тобой состоянии, а именно после отработки всех обработчиков
источник