Mobx rootStore и детские магазины - PullRequest
0 голосов
/ 14 июля 2020

У меня есть магазин root Mobx, с некоторыми дочерними подпорками. Есть ли у меня способ передать только root store в компоненты React и из этого компонента получить доступ к значениям дочернего хранилища, как если бы это свойство было в root. Я имею в виду, например, что у меня есть root store A и его дочернее хранилище B. Дочернее хранилище B имеет свойство C. И из моего компонента реакции я хочу легко получить доступ к свойству C, написав A. C. Итак, я хочу, чтобы мое хранилище root как бы аккумулировало все значения своего дочернего хранилища. Как я могу этого добиться? А может это неправильный способ работы с mobx? Спасибо

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Не делай этого. Это главный антипаттерн, почему у вас есть несколько хранилищ (несколько объектов), если, в конце концов, вы собираетесь объединить их в один? Таким образом, имея несколько магазинов, вы получаете разделение задач . И каждое хранилище несет свои собственные данные и методы для управления этими данными.

Root хранилище используется только для размещения всех хранилищ в одном объекте, поэтому компоненты легко получают доступ к нужным им хранилищам.

Кроме того, существует вероятность столкновения одних и тех же имен свойств и методов нескольких разных хранилищ, если все они объединены в один объект.

Отладка также будет намного сложнее.

0 голосов
/ 15 июля 2020

Я в основном согласен с ответом Ивана В., но могут быть случаи, когда вы хотите «агрегировать» что-то внутри Root магазина или, может быть, другого магазина.

Например, вы можете сделай что-нибудь вроде этого:

class RootStore {
  constructor() {
    this.usersStore = new UsersStore(this);
    this.messagesStore = new MessagesStore(this);
  }

  @computed
  get totalInfo() {
    return `${this.usersStore.items.length} users and ${this.messagesStore.items.length} messages`
  }
}
...