Size: a a a

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

2020 September 17

О

Олег in Reatom — стейт-менеджер
слушайте какой же реатом приятный
источник

О

Олег in Reatom — стейт-менеджер
в 2 строки пишу экшен и редьюсер и кайф
источник

О

Олег in Reatom — стейт-менеджер
теперь возня со стейтом ушла на второй план
источник
2020 September 20

AK

Alexander Kladkov in Reatom — стейт-менеджер
пасип
источник
2020 September 22

И

Илья in Reatom — стейт-менеджер
У меня в общем структура такая:
items: {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
     height: 100
   }
 }


Я получаю в компонентах данные по props = 1 и через:

us
eAtom(itemsAtom, items => items[id], [id]) || {};

Но когда в панели редактирую height(могут быть разные пропсы для редактирования некая мета - много компонентов перерисовывается(так меняется объект)

Легкое решение сделать структуру:
item
s: {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
   },
 },
 itemsMeta: {
   2: {
     height: 100,
   }

То
гда можно селектировать из отдельного атома и все красиво рисуется

@artalar как лучше поступить?

items:
 {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
     meta: {
       height: 100,
     }
   },
 },
може
т сделать вложенный объект? или как?
источник

И

Илья in Reatom — стейт-менеджер
Делая разные атомы я усложню жизнь с клонированием элементов и сериализацией и тп
источник

a

artalar in Reatom — стейт-менеджер
Илья
У меня в общем структура такая:
items: {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
     height: 100
   }
 }


Я получаю в компонентах данные по props = 1 и через:

us
eAtom(itemsAtom, items => items[id], [id]) || {};

Но когда в панели редактирую height(могут быть разные пропсы для редактирования некая мета - много компонентов перерисовывается(так меняется объект)

Легкое решение сделать структуру:
item
s: {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
   },
 },
 itemsMeta: {
   2: {
     height: 100,
   }

То
гда можно селектировать из отдельного атома и все красиво рисуется

@artalar как лучше поступить?

items:
 {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
     meta: {
       height: 100,
     }
   },
 },
може
т сделать вложенный объект? или как?
Ну да, нужно выносить проп в отдельный атом или в текущем структуру сложнее делать

Я в отдельный атом выношу. Хотел фабрику написать, но пока не до этого
источник

И

Илья in Reatom — стейт-менеджер
Вложенная мета лучше но тогда видимо прийдется делать так:
useAtom(itemsAtom, (items) => {
const { meta, …item } = items[id];
return item;
}, [id]) || {};
источник

И

Илья in Reatom — стейт-менеджер
те в useAtom в возврате выливать meta там где она не нужна
источник

a

artalar in Reatom — стейт-менеджер
Илья
Вложенная мета лучше но тогда видимо прийдется делать так:
useAtom(itemsAtom, (items) => {
const { meta, …item } = items[id];
return item;
}, [id]) || {};
не, тут же будет пересоздаваться ссылка на item
источник

a

artalar in Reatom — стейт-менеджер
Илья
У меня в общем структура такая:
items: {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
     height: 100
   }
 }


Я получаю в компонентах данные по props = 1 и через:

us
eAtom(itemsAtom, items => items[id], [id]) || {};

Но когда в панели редактирую height(могут быть разные пропсы для редактирования некая мета - много компонентов перерисовывается(так меняется объект)

Легкое решение сделать структуру:
item
s: {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
   },
 },
 itemsMeta: {
   2: {
     height: 100,
   }

То
гда можно селектировать из отдельного атома и все красиво рисуется

@artalar как лучше поступить?

items:
 {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
     meta: {
       height: 100,
     }
   },
 },
може
т сделать вложенный объект? или как?
Ммм, а там где useAtom(itemsAtom, items => items[id], [id]) || {}; - не используется height??
источник

И

Илья in Reatom — стейт-менеджер
artalar
Ммм, а там где useAtom(itemsAtom, items => items[id], [id]) || {}; - не используется height??
да по сути там проверяется существование объекта и берется type
источник

NS

Nikita Stenin in Reatom — стейт-менеджер
Илья
У меня в общем структура такая:
items: {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
     height: 100
   }
 }


Я получаю в компонентах данные по props = 1 и через:

us
eAtom(itemsAtom, items => items[id], [id]) || {};

Но когда в панели редактирую height(могут быть разные пропсы для редактирования некая мета - много компонентов перерисовывается(так меняется объект)

Легкое решение сделать структуру:
item
s: {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
   },
 },
 itemsMeta: {
   2: {
     height: 100,
   }

То
гда можно селектировать из отдельного атома и все красиво рисуется

@artalar как лучше поступить?

items:
 {
   1: {
     id: 1,
     type: 'row',
   },
   2: {
     id: 2,
     type: 'column',
     meta: {
       height: 100,
     }
   },
 },
може
т сделать вложенный объект? или как?
Вообще есть ощущение, что ререндер может вызывать родитель, а дочерние компоненты это просто функции. Можно попробовать обернуть компонент в мемо и проблема может исчезнуть
источник

И

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

И

Илья in Reatom — стейт-менеджер
Nikita Stenin
Вообще есть ощущение, что ререндер может вызывать родитель, а дочерние компоненты это просто функции. Можно попробовать обернуть компонент в мемо и проблема может исчезнуть
мемо не помогает (
источник

a

artalar in Reatom — стейт-менеджер
Илья
да по сути там проверяется существование объекта и берется type
Так может useAtom(itemsAtom, items => items[id]?.type, [id]);
источник

И

Илья in Reatom — стейт-менеджер
artalar
Так может useAtom(itemsAtom, items => items[id]?.type, [id]);
в целом да вариант попробую
источник

И

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

И

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

И

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