А может не нужно было хранить в пачке разных сторов? Поделюсь подходом который применяю я - у меня в mobx состояния приложения хранится в одном единственном объекте (как в redux) и в то же время это граф отдельных сторов (в том смысле что каждый компонент может работать с ним как с локальным стором)
Cостояние любого приложения на mobx я храню в единственном глобальном объекте у которого есть поле с ссылкой на объект юзера а дальше состояние организуется подобно схемы в базе данных (one-to-many это поле с массивом объектов, many-to-many это через промежуточные объекты).
Пример - есть приложение в котором юзер может создавать папки, в папках -проекты, в проектах - задачи а в задачах комментарии. Состояние такого приложения на mobx я храню в одном единственном объекте AppState
const AppState = {
theme: `...`,
locale: `...`,
user: {
id: `...`
firstName: `...`,
lastName: `...`,
folders: [
{
id: `...`
name: `folder1`,
projects: [
{
id: `..`,
name: `project1`,
tasks: [
{
id: ``,
text: `..`,
comments: [
{id: `..`, text: `...`},
....
]
},
...
]
},
....
]
},
....
]
}
}
То есть это один большой глубокий объект в котором мы храним объекты приложения через вложенность без всяких айдишников. Ну а дальше просто рендерим компоненты передавая каждому компоненту нужный объект
const App () => (
<div>
...
{AppState.user.folders.map(folder=><Folder folder={folder}/>)}
</div>
)
const Folder = ({folder}) => (
<div>
...
{folder.projects.map(project=><Project project={project}/>}
</div>
)
const Project = ({project}) => (
<div>
...
{project.tasks.map(tasks=><Task task={task}/>}
</div>
)
и таким образом каждый компонент получив свой объект может работать с ним как с локальным стором. Например компонент проекта получим объект проекта (<Project project={project}/>) может поменять его имя
const Project = ({project}) => (
<div>
<input
value={project.name}
onChange={()=>
project.name = e.target.value
}/>
...
</div>
)
В общем получается что с одной стороны все состояние приложения хранится в единственном объекте а с другой стороны каждый компонент может работать со своим объектом/"стором" независимо - читать и обновлять данные (без какой либо централизованной обработки как в редаксе). По удобству это практически не отличается от работы с локальным состоянием компонента при этом имея все преимущества хранения в общем сторе.