Size: a a a

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

2021 March 02

M

Maksim Sharov in Reatom — стейт-менеджер
@artalar это баг или я чего-то не учитываю?
источник
2021 March 04

M

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

const increment = declareAction();
const arrayAtom = declareAtom([], on => [on(increment, state => [...state, 1])])
const firstElementAtom = map(arrayAtom, value => value[0]) // вернет undefined

возможно, на синтетическом примере непонятно в чем дело, вот более реальный пример. когда мы работаем с асинхронными вещами типа запроса к API, наш стейт до успешного резолва находится в начальном состоянии

до запроса
const state = {
 items: []
}
после
const state = {
 items: [1, 1, 1]
}
и наш атом-наследник, которому, допустим, нужен 2 элемент поля items упадет, так как начальный массив пустой и возвращается undefined.

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

И

Иван in Reatom — стейт-менеджер
Maksim Sharov
а есть ли способ обойти такой кейc при наследовании атома, когда селектор дает undefined значение, в случае, если стейт атома-родителя еще не готов, например

const increment = declareAction();
const arrayAtom = declareAtom([], on => [on(increment, state => [...state, 1])])
const firstElementAtom = map(arrayAtom, value => value[0]) // вернет undefined

возможно, на синтетическом примере непонятно в чем дело, вот более реальный пример. когда мы работаем с асинхронными вещами типа запроса к API, наш стейт до успешного резолва находится в начальном состоянии

до запроса
const state = {
 items: []
}
после
const state = {
 items: [1, 1, 1]
}
и наш атом-наследник, которому, допустим, нужен 2 элемент поля items упадет, так как начальный массив пустой и возвращается undefined.

да, это можно обойти на уровне дизайна системы и не показывать компонент с этим атомом до загрузки данных, но может есть решение внутри реатома
Таких решений нет ни в реатоме, ни в редаксе, ни в эффекторе. Это штатное поведение.
источник

И

Иван in Reatom — стейт-менеджер
Maksim Sharov
а есть ли способ обойти такой кейc при наследовании атома, когда селектор дает undefined значение, в случае, если стейт атома-родителя еще не готов, например

const increment = declareAction();
const arrayAtom = declareAtom([], on => [on(increment, state => [...state, 1])])
const firstElementAtom = map(arrayAtom, value => value[0]) // вернет undefined

возможно, на синтетическом примере непонятно в чем дело, вот более реальный пример. когда мы работаем с асинхронными вещами типа запроса к API, наш стейт до успешного резолва находится в начальном состоянии

до запроса
const state = {
 items: []
}
после
const state = {
 items: [1, 1, 1]
}
и наш атом-наследник, которому, допустим, нужен 2 элемент поля items упадет, так как начальный массив пустой и возвращается undefined.

да, это можно обойти на уровне дизайна системы и не показывать компонент с этим атомом до загрузки данных, но может есть решение внутри реатома
Можно вокруг навертеть хитростей. Вот буквально сегодня экспериментировал — с реатомом будет выглядеть и работать точно так же

https://t.me/kekpek_dev/18
источник

M

Maksim Sharov in Reatom — стейт-менеджер
да, тоже вариант не считать экшн хуком, если значение из родительского атома пустое
источник

И

Иван in Reatom — стейт-менеджер
Maksim Sharov
да, тоже вариант не считать экшн хуком, если значение из родительского атома пустое
Не совсем понял, о чем ты
источник

d

daibogh in Reatom — стейт-менеджер
@artalar привет, хочу сделать миграцию стейт менеджмента с mobx на reatom. тк проект немаленький, хотел узнать твое мнение: можно ли переписывать логику уже сейчас и впоследствии обновиться до второй версии или лучше подождать релиза?
источник

a

artalar in Reatom — стейт-менеджер
daibogh
@artalar привет, хочу сделать миграцию стейт менеджмента с mobx на reatom. тк проект немаленький, хотел узнать твое мнение: можно ли переписывать логику уже сейчас и впоследствии обновиться до второй версии или лучше подождать релиза?
Подождать, не много осталось
источник

a

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

a

artalar in Reatom — стейт-менеджер
Намного проще будет мигрировать
источник

d

daibogh in Reatom — стейт-менеджер
а когда примерно? к лету?
источник

d

daibogh in Reatom — стейт-менеджер
artalar
Намного проще будет мигрировать
круто!
источник

a

artalar in Reatom — стейт-менеджер
daibogh
а когда примерно? к лету?
Раньше)
источник

a

artalar in Reatom — стейт-менеджер
В марте rc с докой надеюсь закончить
источник

d

daibogh in Reatom — стейт-менеджер
хорошо) спасибо за ответ
источник

a

artalar in Reatom — стейт-менеджер
Я чуть переработал концепцию, все стало попроще, можно теперь свои операторы пилить для вставки в трек атома (`$`).
Например, экшенКриэйтор теперь реализует хендлер через отдельный метод. Вопрос - как его назвать, handle?
источник

a

artalar in Reatom — стейт-менеджер
Рубите фишку?)
источник

И

Иван in Reatom — стейт-менеджер
artalar
Рубите фишку?)
state => {
fn(() => state = ...)
return state
}

Ну такое 🥴
источник

AK

Anton Kalodzich in Reatom — стейт-менеджер
artalar
Я чуть переработал концепцию, все стало попроще, можно теперь свои операторы пилить для вставки в трек атома (`$`).
Например, экшенКриэйтор теперь реализует хендлер через отдельный метод. Вопрос - как его назвать, handle?
А не будет ли на типовом проекте еслинт ругаться на изменение аргументов?
источник

a

artalar in Reatom — стейт-менеджер
Иван
state => {
fn(() => state = ...)
return state
}

Ну такое 🥴
это забей
источник