Size: a a a

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

2020 October 27

VP

Viktor Pasynok in Reatom — стейт-менеджер
Nikita Stenin
Ну она проверяет является ли переданная функция action creator, но нужно в большей степени для внутренних штук. В реатоме в какой-то степени action creator тоже является атомом
👀 благодарю за разъяснение
источник

NS

Nikita Stenin in Reatom — стейт-менеджер
Viktor Pasynok
👀 благодарю за разъяснение
Да не за что
источник

VP

Viktor Pasynok in Reatom — стейт-менеджер
правда, не вижу type у action.

const isAction = (thing: any): thing is Action<any> =>
 thing && 'getType' in thing && /^action/.exec(thing.getType()) !== null;

вот так всё оки, вроде как
источник

NS

Nikita Stenin in Reatom — стейт-менеджер
Viktor Pasynok
правда, не вижу type у action.

const isAction = (thing: any): thing is Action<any> =>
 thing && 'getType' in thing && /^action/.exec(thing.getType()) !== null;

вот так всё оки, вроде как
А тебе нужен экшен или экшен креэйтор?
источник

VP

Viktor Pasynok in Reatom — стейт-менеджер
экшен, если я правильно пониманию

мне надо проверить что я могу это задиспатчить
источник

VP

Viktor Pasynok in Reatom — стейт-менеджер
а. судя по всему надо сменить возвращаемый тип на что-то а-ля:
x is ReturnType<typeof declareAction>
источник

NS

Nikita Stenin in Reatom — стейт-менеджер
Viktor Pasynok
экшен, если я правильно пониманию

мне надо проверить что я могу это задиспатчить
https://gist.github.com/stenin-nikita/ea08040884c03eaa003dbb9fb3b3c5ee#file-isaction-ts в общем вот 2 функции которые в целом должны работать. declareAction возвращает action creator, а когда вызывается action creator то он возвращает action. А можешь сказать или показать кейс, который у тебя возник?
источник

VP

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

VP

Viktor Pasynok in Reatom — стейт-менеджер
идея в том, чтобы не светить наружу внутрянку фичи и иметь прослойку в виде "системы ивентов"

снаружи можно подписаться или же вызвать ивент, который внутри интерпретируется как надо

сверху ещё перегрузкой обмажу, но доп проверки не помешают энивэй
источник

NS

Nikita Stenin in Reatom — стейт-менеджер
Ну тут тебе точно нужна проверка на action creator. А EVENTS как-то динамически заполняется? Просто к примеру можно было бы свести все только к проверке типов и доверится ts. https://cutt.ly/8gWCFTI
источник

VP

Viktor Pasynok in Reatom — стейт-менеджер
> и доверится ts

да, кончено, можно, НО я не исключаю кейсы использования вместе с ts-ignore или без ts вовсе :c
источник

VP

Viktor Pasynok in Reatom — стейт-менеджер
EVENTS заполняется статически. можно было бы разбить на watch only events и на остальные, но такое. кому-то придётся думать из какого типа ивентов что брать

проверка на action creator это по сути защита от "дурака". в рантайме не падает и мне спится спокойно)
источник

NS

Nikita Stenin in Reatom — стейт-менеджер
Viktor Pasynok
EVENTS заполняется статически. можно было бы разбить на watch only events и на остальные, но такое. кому-то придётся думать из какого типа ивентов что брать

проверка на action creator это по сути защита от "дурака". в рантайме не падает и мне спится спокойно)
В твоем случае в целом вообще достаточно проверить что в EVENTS по какому-то ключу что-то существует, тем более если этот объект находится внутри и кто-то еще не может на него повлиять.
источник

VP

Viktor Pasynok in Reatom — стейт-менеджер
сейчас в events лежат action creators

есть понимание того, что там будут лежать и атомы
источник
2020 November 10

g

gizeasy in Reatom — стейт-менеджер
export const startСookingAction = declareAction();
export const startСookingTimeOutAction = declareAction();
export const sidebarAtom = declareAtom<SnackBarItem[]>([], (on) => [
 on(startСookingAction, () => {
   const item: SnackBarItem = {
     key: "item",
     message: "Начали готовить ваш заказ",
     status: "success",
     autoClose: true,
     onClose: startСookingTimeOutAction, <--- Тут экшен который хотелось бы чтоб вызвался в компоненте
   };
   return [item];
 }),
 on(startСookingTimeOutAction, () => []),
]);


как ни буть можно реализовать такую штуку:
По одному экшену создается объект в свойстве которого нужно иметь другой экшн, так чтобы не вмешиваться в этот объект из компонента. Чтоб на уровне модуля все сделать? Пробовал useAction использовать прямо в модуле, ну и хуки тут не работают((
источник

a

artalar in Reatom — стейт-менеджер
gizeasy
export const startСookingAction = declareAction();
export const startСookingTimeOutAction = declareAction();
export const sidebarAtom = declareAtom<SnackBarItem[]>([], (on) => [
 on(startСookingAction, () => {
   const item: SnackBarItem = {
     key: "item",
     message: "Начали готовить ваш заказ",
     status: "success",
     autoClose: true,
     onClose: startСookingTimeOutAction, <--- Тут экшен который хотелось бы чтоб вызвался в компоненте
   };
   return [item];
 }),
 on(startСookingTimeOutAction, () => []),
]);


как ни буть можно реализовать такую штуку:
По одному экшену создается объект в свойстве которого нужно иметь другой экшн, так чтобы не вмешиваться в этот объект из компонента. Чтоб на уровне модуля все сделать? Пробовал useAction использовать прямо в модуле, ну и хуки тут не работают((
Нуу можно onClose: () => startСookingTimeOutAction(key) и в хендлере атома на startСookingTimeOutAction соотносить key из пайлоада с соответствующим элементом
источник

g

gizeasy in Reatom — стейт-менеджер
artalar
Нуу можно onClose: () => startСookingTimeOutAction(key) и в хендлере атома на startСookingTimeOutAction соотносить key из пайлоада с соответствующим элементом
export const startСookingAction = declareAction();
export const startСookingTimeOutAction = declareAction<string>();
export const sidebarAtom = declareAtom<SnackBarItem[]>([], (on) => [
 on(startСookingAction, () => {
   const item: SnackBarItem = {
     key: "item",
     message: "Начали готовить ваш заказ",
     status: "success",
     // autoClose: true,
     onClose: () => startСookingTimeOutAction("item"),
   };
   return [item];
 }),
 on(startСookingTimeOutAction, (state, payload) => {
   console.log(payload);
   console.log(state);
   return [];
 }),
]);


попробовал и что-то startСookingTimeOutAction не вызывается. onClose отрабатывает а сам экшн нет((
источник

a

artalar in Reatom — стейт-менеджер
Аа, ну да, биндить же экшен нужно
источник

a

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

a

artalar in Reatom — стейт-менеджер
Ну обычно это решается тем что onClose объявляется в родителе, через useAction(startСookingTimeOutAction), т.е. не является частью элемента в списке
источник