169 похожих чатов

Доброго дня. Я далёк от фронта, пользовался связкой React+Redux для собственного

интереса. Сейчас решил поковыряться опять и увидел, что есть альтернатива Redux. Вижу, что MobX довольно давно появился и уже успел пройти довольно долгий путь изменений. Куча вариантов, как его использовать. Статьи в разные годы в разнобой вещают. Не до конца ясная документация. Вызывающие злобу примитивные, однотипные примеры Counter и ToDo.
Я пробую разобраться как натянуть всё это на типизированные функциональные компоненты.
Банальный пример, хочу создать простой одностраничник с логином, регистрацией, отображением пользователей, организациями и условными документами принадлежащими пользователю внутри организации. То есть, кое-что, что выходит за рамки Counter и хотя бы как-то отображает реальный пример приложения.
Хочется собрать итоговый store из нескольких. Например, пусть будет rootStore состоящий из userStore, orgStore и docStore. Все описывать не буду, вот пример создания стора пользователя:
const createUserStore = () => {
const store: I_UserStore = {
...,
login(login, password){console.log(login, password);},
...
};
return store;
};
Теперь, создаём rootStore:
const createRootStore = () => {
const store: I_RootStore = {
...,
userStore: createUserStore(),
...
};
return store;
};
Далее надо определиться с тем, как подключать store. Решил делать это через контекст реакта:
const RootContext = React.createContext({} as I_RootStore);

const StoreProvider = ({children}: any) => {
const rootStore = useLocalStore(createRootStore)
return <RootContext.Provider value={rootStore}>
{children}
</RootContext.Provider>
};

const useRootStore = () => React.useContext(RootContext);
После, в index.tsx я оборачиваю <App/> в StoreProvider.
А в нужных компонентах просто импортирую useRootStore и пользую по назначению.
Но, возникает вопрос, всё ли я правильно делаю?
Вот, допустим, ситуация, хочу я прикрутить Notistack. Как при неудачном логине вызвать экшен notistack? Ведь login это экшен из userStore, а экшен enqueueSnackbar - в snackStore? И такого поведения может быть полно. При работе с Redux, я просто диспатчу нужный экшен в нужном месте в thunk. А как тут поступать - ума не приложу.

7 ответов

1 просмотр

Можешь пожалуйста в сенбокс запихать а то не удобно так вдупляться

Philipp-Bondarev Автор вопроса
Maxim Koylo
Можешь пожалуйста в сенбокс запихать а то не удобн...

Пока нечего запихивать. Я это так, размышляю.

Philipp Bondarev
Пока нечего запихивать. Я это так, размышляю.

ты спрашиваешь как организовывать общение между сторами?

Philipp-Bondarev Автор вопроса
Maxim Koylo
ты спрашиваешь как организовывать общение между ст...

Я читал, что это плохая мысль, но по факту, ведь может же быть такое, что в экшене из стора с юзерами надо дёрнуть экшен стора документов и дополнительно экшен из стора нотификаций.

Philipp Bondarev
Я читал, что это плохая мысль, но по факту, ведь м...

кто то делает древовидную структуру сторов что бы с каждого стора ты мог по цепочке дойти до нужного тебе стора так же кто то делает через DI

Philipp-Bondarev Автор вопроса
Maxim Koylo
кто то делает древовидную структуру сторов что бы ...

Хмм, кажется про DI статью от Тинькова на Хабре недавно видел. Надо поискать. Спасибо.

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Кто может подсказать? Я преобрпзовал изображение в бинарное(у меня установлен трекбар который при установленном значении меняет пиксели на белый если меньше и чёрный если боль...
Константин VS
6
Карта сайта