Каков наилучший способ создать единый магазин 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);
    }

}

Родитель хранит ссылки на потомков, а каждый потомок имеет ссылку на родителя.

Другие вопросы по тегам