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?
адрес юзера откуда появляется? сам по себе приходит или есть фетч какой-то?
источник

fe

from earth in ☄️ effector
Первый 🦄 Император
адрес юзера откуда появляется? сам по себе приходит или есть фетч какой-то?
ну это будет решаться за пределами эффектора
источник

fe

from earth in ☄️ effector
ну считай что когда модалку открываем там происходит всё что надо
источник

DS

Dmitriy Shuleshov in ☄️ effector
источник

fe

from earth 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?
блин сложно-то как это сделать почему-то
источник

AO

Aleksandr Osipov in ☄️ effector
а блин я лошара
источник

꧁岡

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

DS

Dmitriy Shuleshov in ☄️ effector
from earth
sample({ source: sample }) 🤷‍♀️
@ZeroBias #article #composition
Раз тусовка тут основная, то буду для тебя отмечать потребности в инфе
источник

꧁岡

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

DS

Dmitriy Shuleshov in ☄️ effector
Работать гет стейт будет, но лучше не нада
источник

П

Первый 🦄 Император... in ☄️ effector
from earth
ну считай что когда модалку открываем там происходит всё что надо
источник

NK

ID:0 in ☄️ effector
patronum v0.106

- зафикшен babel-preset, теперь работает так как и должен изначально 🙂
- многие методы исправлены для поддержки пресета, прокидываются правильные имена для создаваемых сущностей

https://github.com/effector/patronum/releases/tag/v0.106.0
источник

fe

from earth in ☄️ effector
у тебя кнопка next изначально недоступна, так неинтересно)
источник

fe

from earth 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?
блин вот реально императивно решается до смеха просто:

<button onClick={() => {
 if (address) {
   next();
 } else {
   showAddressDialog({ onSuccess: next });
 }
}} />


При этом другой код может спокойно тоже вызывать showAddressDialog и по итогу принимать другие действия

А с эффектором пока трудновато идёт решение
источник

AO

Aleksandr Osipov in ☄️ effector
Dmitriy Shuleshov
Работать гет стейт будет, но лучше не нада
Так а на каком примере тогда можно продемонстрировать что не надо getState?
источник

П

Первый 🦄 Император... in ☄️ effector
from earth
блин вот реально императивно решается до смеха просто:

<button onClick={() => {
 if (address) {
   next();
 } else {
   showAddressDialog({ onSuccess: next });
 }
}} />


При этом другой код может спокойно тоже вызывать showAddressDialog и по итогу принимать другие действия

А с эффектором пока трудновато идёт решение
омг
источник

fe

from earth in ☄️ effector
это что значит?)
источник

П

Первый 🦄 Император... in ☄️ effector
from earth
это что значит?)
ты не внутри кнопки методы меняй, а вокруг.
подставляй в UI необходимые элементы в зависимости от условий
источник

П

Первый 🦄 Император... in ☄️ effector
если нет адреса, то добавь кнопку «Добавь адрес»
источник

DS

Dmitriy Shuleshov in ☄️ effector
Aleksandr Osipov
Так а на каком примере тогда можно продемонстрировать что не надо getState?
Нужно тут поискать по чату
источник