StoreContext = React.createContext(null);
это мы используем контекст типа useContext? или это от мобикс фишка?
не, в этом и прикол, это чистый реакт, React.createContext же. mobx тут не при чём. Раньше у mobx был свой провайдер, но сейчас он не нужен
я может глупости спрошу, но без контекста мобикс не дает доступ к стору? Я думал что или контекст или стейт менеджер.. не думал что они нужны вместе...
контекст тут нужен только для доступа, точно так же как в редаксе ты используешь диспач, думаешь он реализован без контекста? ))
без не деёт, т.е. повторю, ты можешь использовать провайдер от mobx-react, но там условно такой же контекст в кишках
я ниодин стейт менеджер пока не пробовал, и не знаю о них ничего))))
если глянул статью и примерно понял хотя бы код, то в общем представь, что ты в любом компоненте можешь обратиться к store.user.login и получить логин, или к store.user.signOut и деавторизировать пользователя. при этом тебе не нужно ничего никуда прокидывать. стор по сути это большое, глобальное, реактивное хранилище. я там храню пользователя, текущую версию софта, настройки темплейта (тёмная или светлая тема), туда же складываю все данные из апи, которые нужны. списки, директории итп. во-первых, mobx прекрасен в своей реактивности, он очень строг и при этом очень прост. с одной стороны, использовать легко, с другой, трудно допустить ошибку. во-вторых, ты не паришься больше с прокидыванием чего-либо, что должно быть глобальным. но это я уже говорил )
а например основные данные(рецепты в моем случае) тоже там можно хранить, получая из бд?
да, в твоём случае я бы сделал стор categories, стор recipes (или как там они), в сторах описал бы экшены для работы с ними, в том числе транспорт и клал бы всё, что пришло из апи в store.categories.items, например. т.е. загружается приложение, я делаю store.categories.load(), где load — асинхронный экшен, который делает запрос к апи и кладёт всё в store.categories.items, а на странице уже flatlist, который в data получает store.categories.items
спасибо! Буду изучать!
На самом деле контекст – лишь один из вариантов. Поэтому фраза "не даёт без контекста доступ к стору" не совсем корректна. Дело в том, что mobx'овскому observer'у (или реакции или авторану, mobx же не завязан на react вообще, его можно где угодно применять, хоть в консольном приложении). Так вот, observer'у абсолютно пофиг откуда именно взялись observable на изменения которых он подписывается. Хоть из глобальной переменной, хоть из пропсов компонента. Поэтому, к примеру, мы вообще в приложениях не используем redux-подобные термины "стор", "стейт" и прочее... они только путают и заставляют строить архитектуру по какому-то шаблону, даже если для конкретного приложения этот шаблон неудобен. Поэтому observable-модели можно передавать в observer-компоненты любым возможным для приложения способом удобным для проекта/команды, это может быть: глобальная переменная, синглтон, DI система, react context, пропсы. Что угодно.
по сути что контекст, что обёртывание в обсервабл делает одно и то же, но в терминалогии я не силён, поэтому умываю руки )
Ну при передаче корня моделей (сторов) в компоненты реактовскими методами есть одно преимущество перед всякими синглтонами всё же – фаст рефреш лучше работает. Но это единственное преимущество.
Обсуждают сегодня