Size: a a a

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

2020 September 22

И

Илья in Reatom — стейт-менеджер
Такая штуковина пока получается
источник

a

artalar in Reatom — стейт-менеджер
Илья
или делать как селекторы?
useAtom(itemsAtom, items => { type: items[id]?.type, second: items[id]?.second }, [id]);
хотя так тоже будет новый объект же
Кажись в createUseAtom нужно добавить возможность указания функции компаратора, что бы shallow chfdytybt ltkfnm
источник

a

artalar in Reatom — стейт-менеджер
Илья
Такая штуковина пока получается
ничосе
источник

И

Илья in Reatom — стейт-менеджер
artalar
Кажись в createUseAtom нужно добавить возможность указания функции компаратора, что бы shallow chfdytybt ltkfnm
Как я понимаю пока этого нет?
источник

a

artalar in Reatom — стейт-менеджер
Илья
Как я понимаю пока этого нет?
Ша добавлю
источник

И

Илья in Reatom — стейт-менеджер
artalar
ничосе
буду кидать прогресс и демку сюда - как выкачу в веб
источник

И

Илья in Reatom — стейт-менеджер
artalar
Ша добавлю
спасибо буду здать тогда
источник

И

Илья in Reatom — стейт-менеджер
кстати можно будет использовать что-то вроде react-fast-compare и все
источник

И

Илья in Reatom — стейт-менеджер
но конечно не злоупотреблять
источник

a

artalar in Reatom — стейт-менеджер
Илья
спасибо буду здать тогда
Ммм, чет я туплю, так можно замемоизировать shallow сам селектор
источник

И

Илья in Reatom — стейт-менеджер
artalar
Ммм, чет я туплю, так можно замемоизировать shallow сам селектор
useAtom(itemsAtom, (items) => useMemo(items[selected], isEqual), [selected]); типа того?
источник

a

artalar in Reatom — стейт-менеджер
Илья
или делать как селекторы?
useAtom(itemsAtom, items => { type: items[id]?.type, second: items[id]?.second }, [id]);
хотя так тоже будет новый объект же
function createShallowMemoSelector(selector) {
 let cacheI;
 let cacheIKeys;
 let cacheO;

 return (input) => {
   if (!cacheI) {
     cacheIKeys = Object.keys((cacheI = input));
     return (cacheO = selector(input));
   }
   const iKeys = Object.keys(input);

   if (
     cacheIKeys.length === iKeys.length &&
     iKeys.every((k) => Object.is(input[k], cacheI[k]))
   ) {
     return cacheO;
   }

   cacheI = input;
   cacheIKeys = iKeys;
   return (cacheO = selector(input));
 };
}
источник

И

Илья in Reatom — стейт-менеджер
это откуда? createShallowMemoSelector
источник

a

artalar in Reatom — стейт-менеджер
const memoComputed = useCallback(createShallowMemoSelector(v => v))

const {a, b} = useAtom(listAtom, items => memoComputed({a: items[id].a, b: items[id].b}), [id])
источник

И

Илья in Reatom — стейт-менеджер
artalar
const memoComputed = useCallback(createShallowMemoSelector(v => v))

const {a, b} = useAtom(listAtom, items => memoComputed({a: items[id].a, b: items[id].b}), [id])
я не могу на гитхабе найти метод createShallowMemoSelector
или это свой?
источник

a

artalar in Reatom — стейт-менеджер
Илья
я не могу на гитхабе найти метод createShallowMemoSelector
или это свой?
источник

И

Илья in Reatom — стейт-менеджер
аааа
источник

И

Илья in Reatom — стейт-менеджер
спс попробую
источник

И

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

a

artalar in Reatom — стейт-менеджер
artalar
function createShallowMemoSelector(selector) {
 let cacheI;
 let cacheIKeys;
 let cacheO;

 return (input) => {
   if (!cacheI) {
     cacheIKeys = Object.keys((cacheI = input));
     return (cacheO = selector(input));
   }
   const iKeys = Object.keys(input);

   if (
     cacheIKeys.length === iKeys.length &&
     iKeys.every((k) => Object.is(input[k], cacheI[k]))
   ) {
     return cacheO;
   }

   cacheI = input;
   cacheIKeys = iKeys;
   return (cacheO = selector(input));
 };
}
мне кажется я чето не то написла 😅
источник