Каков наилучший способ создать единый магазин MobX для приложения?
Я использую MobX и Redux около 6 месяцев. Я обнаружил, что для большинства приложений я предпочитаю простоту MobX. Тем не менее, мне нравится концепция Redux для одного магазина. Я слышал, как другие комментируют, что они создают единую историю с MobX, и я пытаюсь определить лучший путь. В настоящее время я создаю несколько магазинов, а затем импортирую их в один магазин.
class AuthStore{
@observable currentUser;
constructor(){
this.currentUser = {}
}
@action loginUser =(data)=>{
this.currentUser = getUser(data);
}
}
let authStore = new AuthStore();
export default authStore;
`` `
class UiStore{
@observable uiData;
constructor(){
this.uiData = {}
}
@action updateUI =(data)=>{
this.uiData = {data: data};
}
}
let uiStore = new UiStore();
export default uiStore;
`` `
`` `
class Store{
@observable currentUser;
constructor(){
this.auth = authStore;
this.ui = uiStore;
}
}
let store = new store();
export default store;
`` `
Здесь я в основном создаю отдельные магазины, которые затем объединяются в один магазин, аналогично тому, как работает редукционный редуктор.
Есть ли другой / лучший способ? Я подумал, может быть, импортировать хранилище в разные файлы и поместить некоторые методы и данные в класс prototype
,
1 ответ
Я использую MobX уже год и в основном делаю то же самое:
1) У меня есть один "главный" или "родительский" магазин, обычно называемый как class Store {...}
2) Тогда у меня есть несколько небольших магазинов, которые хранятся в "мастерском" магазине.
3) Я предпочитаю строить детские магазины в конструкторе мастерского магазина. Более того, я обнаружил, что иногда мой дочерний магазин должен наблюдать некоторые данные из родительского хранилища, поэтому я передаю this
в дочерние конструкторы:
class UserStore {...}
class TodosStore {...}
class Store {
constructor() {
this.user = new UserStore(this);
this.todos = new TodosStore(this);
}
}
Родитель хранит ссылки на потомков, а каждый потомок имеет ссылку на родителя.