Mobx rootStore和儿童商店

时间:2020-07-14 08:54:17

标签: mobx mobx-react

我有一个Mobx根商店,其中有一些子商店。我有什么办法可以只将根存储传递给React组件,并从该组件访问子存储的值,就像该属性位于根目录中一样。我的确切意思是,例如,我有根存储A及其子存储B。子存储B具有属性C。从我的react组件中,我想通过编写A.C轻松访问C属性。因此,我希望我的根存储区能够累积所有子存储区的价值。我该如何实现?也许这是使用mobx的错误方式?谢谢

2 个答案:

答案 0 :(得分:1)

不要这样做。那是一个主要的反模式,如果最后要将它们合并为一个,为什么还要有多个存储(多个对象)?因此,通过拥有多个商店,您将拥有一个separation of concerns。每个商店都拥有自己的数据和操作该数据的方法。

根存储区仅用于将所有存储区放在一个对象中,因此组件可以轻松访问所需的存储区。

同样,如果属性名称和方法在多个不同的存储库中合并,则可能会发生冲突。

调试也要困难得多。

答案 1 :(得分:0)

我大部分都同意Ivan V.的回答,但是在某些情况下,您可能想“汇总” 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`
  }
}