Size: a a a

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

2021 March 01

a

artalar in Reatom — стейт-менеджер
Evgeny Cherkasov
Привет

Подскажите, пожалуйста, есть ли разница и в чем?

const picture = useAtom(collectionAtom, ({ data }) => data.picture, []);

const { data: { picture } } = useAtom(collectionAtom);

Нужна только переменная picture
В первом случае НЕ будет ререндер, если изменился data, но не изменился picture
источник

EC

Evgeny Cherkasov in Reatom — стейт-менеджер
artalar
В первом случае НЕ будет ререндер, если изменился data, но не изменился picture
Благодарю 👍
Кстати отличное выступление на конфе, мне очень понравилось, было интересно)
источник

a

artalar in Reatom — стейт-менеджер
Evgeny Cherkasov
Благодарю 👍
Кстати отличное выступление на конфе, мне очень понравилось, было интересно)
Спасибо)
источник

ЮМ

Юрий Минаков... in Reatom — стейт-менеджер
Всем привет!
Никто никогда не сталкивался с проблемой некорректной отрисовки массива, который хранится в атоме?
Кейс вот какой: в атоме хранится массив файлов, есть два action-а: в одном файл добавляется в массив, в другом он удаляется из массива.
Рендерим массив во вьюшке, в этой же вьюшке отображаем кнопку, при нажатии на которую диспатчится action добавления файла в массив.
При добавлении происходит перерисовка компонента, массив с файлами при этом изменяется, но в DOM-е при этом список не изменился.
Реализовал этот же кейс через useState - с помощью него все норм
источник

IA

Ilya Agarkov in Reatom — стейт-менеджер
Юрий Минаков
Всем привет!
Никто никогда не сталкивался с проблемой некорректной отрисовки массива, который хранится в атоме?
Кейс вот какой: в атоме хранится массив файлов, есть два action-а: в одном файл добавляется в массив, в другом он удаляется из массива.
Рендерим массив во вьюшке, в этой же вьюшке отображаем кнопку, при нажатии на которую диспатчится action добавления файла в массив.
При добавлении происходит перерисовка компонента, массив с файлами при этом изменяется, но в DOM-е при этом список не изменился.
Реализовал этот же кейс через useState - с помощью него все норм
без кода тут сложно  разобраться - посмотреть бы на это на codesandbox
источник

a

artalar in Reatom — стейт-менеджер
Юрий Минаков
Всем привет!
Никто никогда не сталкивался с проблемой некорректной отрисовки массива, который хранится в атоме?
Кейс вот какой: в атоме хранится массив файлов, есть два action-а: в одном файл добавляется в массив, в другом он удаляется из массива.
Рендерим массив во вьюшке, в этой же вьюшке отображаем кнопку, при нажатии на которую диспатчится action добавления файла в массив.
При добавлении происходит перерисовка компонента, массив с файлами при этом изменяется, но в DOM-е при этом список не изменился.
Реализовал этот же кейс через useState - с помощью него все норм
В корне приложения React.StrictMode?
источник

ЮМ

Юрий Минаков... in Reatom — стейт-менеджер
ага
источник

a

artalar in Reatom — стейт-менеджер
Выпущу завтра патч для реакт пакета...
источник

a

artalar in Reatom — стейт-менеджер
Юрий Минаков
ага
Если убрать, бага уйдет
источник

a

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

ЮМ

Юрий Минаков... in Reatom — стейт-менеджер
сейчас проверю, спасибо
источник

ЮМ

Юрий Минаков... in Reatom — стейт-менеджер
да, спасибо, помогло)
источник

M

Maksim Sharov in Reatom — стейт-менеджер
artalar
В первом случае НЕ будет ререндер, если изменился data, но не изменился picture
это получается, что мемоизировать можно не только третьим аргументов хука, как описано здесь https://reatom.js.org/#/packages/react?id=retrieve-atom-state-and-apply-dynamic-selector, но и получением поля с помощью динамического селектора?
источник

M

Maksim Sharov in Reatom — стейт-менеджер
да, и можем мемоизировать еще через сам атом? https://reatom.js.org/#/guides/migration-from-redux?id=selectors
источник

a

artalar in Reatom — стейт-менеджер
Maksim Sharov
это получается, что мемоизировать можно не только третьим аргументов хука, как описано здесь https://reatom.js.org/#/packages/react?id=retrieve-atom-state-and-apply-dynamic-selector, но и получением поля с помощью динамического селектора?
Ну это связанные вещи, третий аргумент чекает изменение данных, которые приходят из пропсов, а селектор данные из стора / атома. Селектор создается единожды и вызывается только при поступлении новых данных от стора и пересоздается и перевычисляется, если поменялись данные в третьем аргументе. Но если не поменялись, между ререндерами селектор выдаваться не будет (опять же, если только данные из стора не придут)
источник

M

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

как лучше делать?

если мы не зависим от пропсов делать так https://reatom.js.org/#/packages/react?id=retrieve-atom-state-from-the-store, атом мемоизирован из коробки https://reatom.js.org/#/guides/migration-from-redux?id=selectors

если зависим от пропсов  https://reatom.js.org/#/packages/react?id=retrieve-atom-state-and-apply-dynamic-selector

верно?
источник

a

artalar in Reatom — стейт-менеджер
Maksim Sharov
звучит немного запутанно.

как лучше делать?

если мы не зависим от пропсов делать так https://reatom.js.org/#/packages/react?id=retrieve-atom-state-from-the-store, атом мемоизирован из коробки https://reatom.js.org/#/guides/migration-from-redux?id=selectors

если зависим от пропсов  https://reatom.js.org/#/packages/react?id=retrieve-atom-state-and-apply-dynamic-selector

верно?
b = map(a, a=> a.b)
useAtom(b)

===

useAtom(a, a => a.b)
источник

M

Maksim Sharov in Reatom — стейт-менеджер
хотя, я, наверно, понимаю почему дана возможно писать селекторы прям в хуках, чтобы не писать еще один атом в map

пускай компонент сам решает как обрабатывать данные
источник

a

artalar in Reatom — стейт-менеджер
Maksim Sharov
хотя, я, наверно, понимаю почему дана возможно писать селекторы прям в хуках, чтобы не писать еще один атом в map

пускай компонент сам решает как обрабатывать данные
Ага)
источник
2021 March 02

y

ymdev in Reatom — стейт-менеджер
Мне чем пакет для реакта не нравится, так это необходимость при использовании useAtom таскать за собой ссылку на atom. Я закостылил конечно
fn createUseSelector(atom)
   return fn useSelector(selector) { return useAtom(atom, selector) }

export useSelector = createUseSelector(atom)
но хотелось бы что-нибудь из коробки для этого
источник