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 ответов

18 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта