Size: a a a

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

2021 March 24

Е

Евгений in Reatom — стейт-менеджер
Простиые типы данных в примерах только для простоты примера
источник

R

Ruslan G. in Reatom — стейт-менеджер
ага. спасибо
источник

R

Ruslan G. in Reatom — стейт-менеджер
и еще вопрос.

если в первом компоненте  используются только два свойства из атома:
 const { dateStart, dateEnd } = useAtom(asaAtom);

а во втором диспатчится action, который изменит свойство pageIndex в том же атоме asaAtom,
то первый компонент перерендерится.

но чтобы первый компонент не отрендерился при вызове этого action из второго компонента, надо в первом компоненте dateStart и dateEnd получить другим способом:
 const dateStart = useAtom(asaAtom, (atomValue) => atomValue.dateStart, []);
const dateEnd = useAtom(asaAtom, (atomValue) => atomValue.dateEnd, []);

правильно?
источник

Е

Евгений in Reatom — стейт-менеджер
Да, верно
источник

И

Иван in Reatom — стейт-менеджер
Ruslan G.
и еще вопрос.

если в первом компоненте  используются только два свойства из атома:
 const { dateStart, dateEnd } = useAtom(asaAtom);

а во втором диспатчится action, который изменит свойство pageIndex в том же атоме asaAtom,
то первый компонент перерендерится.

но чтобы первый компонент не отрендерился при вызове этого action из второго компонента, надо в первом компоненте dateStart и dateEnd получить другим способом:
 const dateStart = useAtom(asaAtom, (atomValue) => atomValue.dateStart, []);
const dateEnd = useAtom(asaAtom, (atomValue) => atomValue.dateEnd, []);

правильно?
или сделать вычисляемый атом

const newAtom = map(
asaAtom,
({dateStart, dateEnd}) =>
 ({dateStart, dateEnd})
)

const { dateStart, dateEnd } = useAtom(newAtom);
источник

R

Ruslan G. in Reatom — стейт-менеджер
спасибо
источник

S

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

const newAtom = map(
asaAtom,
({dateStart, dateEnd}) =>
 ({dateStart, dateEnd})
)

const { dateStart, dateEnd } = useAtom(newAtom);
Этот атом при каждом изменении asaAtom будет  возвращать новый обьект, и useAtom будет лишний раз рендерить даже если dateStart и dateEnd не изменились
источник

И

Иван in Reatom — стейт-менеджер
Sergey
Этот атом при каждом изменении asaAtom будет  возвращать новый обьект, и useAtom будет лишний раз рендерить даже если dateStart и dateEnd не изменились
да, точно. тут я немножко опростофилился. мапить лучше в примитивы

@asf3c fyi
источник

AM

Artem Mironov in Reatom — стейт-менеджер
но если использовать деструктуризацию объекта, то наверное все равно, разве нет?
источник

Е

Евгений in Reatom — стейт-менеджер
Artem Mironov
но если использовать деструктуризацию объекта, то наверное все равно, разве нет?
Как именно? Ведь все равно же новый объект получится
источник

AM

Artem Mironov in Reatom — стейт-менеджер
Евгений
Как именно? Ведь все равно же новый объект получится
да, сорян. че то затупил
источник

M

Maksim Sharov in Reatom — стейт-менеджер
Sergey
Этот атом при каждом изменении asaAtom будет  возвращать новый обьект, и useAtom будет лишний раз рендерить даже если dateStart и dateEnd не изменились
То есть мемоизация атома возможна только в случае вычисления примитивов или использования третьего аргумента?
источник

M

Maksim Sharov in Reatom — стейт-менеджер
@artalar поясни, пожалуйста
источник

S

Sergey in Reatom — стейт-менеджер
Maksim Sharov
То есть мемоизация атома возможна только в случае вычисления примитивов или использования третьего аргумента?
Третий аргумент не поможет
источник

M

Maksim Sharov in Reatom — стейт-менеджер
Sergey
Третий аргумент не поможет
Мы же про третий аргумент хука? Почему?
источник

S

Sergey in Reatom — стейт-менеджер
Maksim Sharov
Мы же про третий аргумент хука? Почему?
Он для внешних зависимостей, т.е то что из пропсов приходит например, а если сам атом меняется то важно что возвращает селектор в useAtom
источник

S

Sergey in Reatom — стейт-менеджер
Sergey
Он для внешних зависимостей, т.е то что из пропсов приходит например, а если сам атом меняется то важно что возвращает селектор в useAtom
А он возвращает новую ссылку, следовательно ререндер будет
источник

M

Maksim Sharov in Reatom — стейт-менеджер
Sergey
Он для внешних зависимостей, т.е то что из пропсов приходит например, а если сам атом меняется то важно что возвращает селектор в useAtom
Значит мемоизация только при возврате примитивов?
источник

S

Sergey in Reatom — стейт-менеджер
В примере выше можно поля dateStart, dateEnd вынести в поле period и выбирать его из атома
источник

S

Sergey in Reatom — стейт-менеджер
Maksim Sharov
Значит мемоизация только при возврате примитивов?
Нет, тут аналогично reselect
источник