Size: a a a

Reatom — стейт-менеджер

2020 June 05

NS

Nick Shevrov in Reatom — стейт-менеджер
И там рут store должен быть:
{
tableAtom.getTreeId(): 123
}
источник

a

artalar in Reatom — стейт-менеджер
Nick Shevrov
И там рут store должен быть:
{
tableAtom.getTreeId(): 123
}
Типа того, да
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Так ок, спасибо
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
artalar
Реакт датадрайвен же, а экшен дату не хранит
Ну вот редирект как ещё можно сделать?
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Пока прям идей нет и я сделал через атом
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Атом подписался на fetchSuccess, и в колбэке там уже window.location меняется
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Это явно не очень
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Но работает
источник

a

artalar in Reatom — стейт-менеджер
Nick Shevrov
Только непонятно, как в реакте заюзать
Вытащить контекст через useContext и подписаться на него в useEffect
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Ага, вот и говорю, что нужен ещё один хук в пакет
источник

a

artalar in Reatom — стейт-менеджер
Ну это частный случай, таких много, так можно пакет бесконечно раздувать)
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Ну максимум 30 строк же
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Nick Shevrov
const createMyEntityAtom = entity => declareAtom(“someAtom”, entity, ....)

export const storagedAtom = createMyEntityAtom(localStorage.get(“data”)

Примерно так
Это не нужно, кстати по итогу
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
@artalar спасибо большое, помог
источник

a

artalar in Reatom — стейт-менеджер
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Nick Shevrov
Ну максимум 30 строк же
function handleAction(
   action: AnyActionCreator,
   callback: (store: Store, payload: any) => void,
): void {
   const store = useContext(ctx);

   if (!store) throw new Error('[reatom] The provider is not defined');

   return useEffect(() => {
       // @ts-ignore
       store.subscribe(action, payload => {
           callback(store, payload);
       });
   });
}


А в коде:


handleAction(cndleAction(checkPrinterSuccess, eckPrinterSuccess, (store) => {
   store.dispatch(redirectTo({
       pageId: 'nextPage',
       params: {},
   }))
});
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Типизация store только теряется
источник

NS

Nick Shevrov in Reatom — стейт-менеджер
Но это уже прям как эпики
источник

a

artalar in Reatom — стейт-менеджер
Nick Shevrov
function handleAction(
   action: AnyActionCreator,
   callback: (store: Store, payload: any) => void,
): void {
   const store = useContext(ctx);

   if (!store) throw new Error('[reatom] The provider is not defined');

   return useEffect(() => {
       // @ts-ignore
       store.subscribe(action, payload => {
           callback(store, payload);
       });
   });
}


А в коде:


handleAction(cndleAction(checkPrinterSuccess, eckPrinterSuccess, (store) => {
   store.dispatch(redirectTo({
       pageId: 'nextPage',
       params: {},
   }))
});
Результат сабскрайба нужно вернуть из эффекта
источник

a

artalar in Reatom — стейт-менеджер
Что бы подписку почистить при анмаунте
источник