2

什么方法更好?我认为比第一种方式更好。孩子中的导入父母对我来说看起来很奇怪,但也许我错了。

根存储:

export const RootStore = types
  .model('RootStore', {
    store1: types.optional(Store1, {}),
    store2: types.optional(Store2, {}),
    store3: types.optional(Store3, {}),
    store3: types.optional(Store4, {}),
    name: 'name'
  })

export const rootStore = RootStore.create()

第一种方式:

export const Store1 = types
  .model('Store1', {
    some: ''
  })
  .views(self => ({
    get rootStore() {
      return getParent(self)
    },
    get name() {
      return self.rootStore.name
    }
  }))

第二种方式:


import { rootStore } from './rootStore'

export const Store1 = types
  .model('Store1', {
    some: ''
  })
  .views(self => ({
    get name() {
      return rootStore.name
    }
  }))
4

2 回答 2

0

如果您只需要访问树中的根节点,那么有一个专门针对这种情况的专用帮助函数 - getRoot(self)

给定模型树中的对象,返回该树的根对象。

于 2019-03-02T15:59:28.007 回答
0

这个问题的所有答案都可能是固执己见的。

如果你要这样做,我认为第一种方法更好。仅仅因为这意味着孩子不需要知道任何关于它的父母的事情,除了它公开一个name属性。

话虽这么说,我真的不是这两种方法的忠实拥护者。

无论您是使用getParent还是闭包,这都会鼓励两个模型的耦合。这会导致模块化程度降低和测试更加困难,因为每个人都Store1必须是 a 的子级RootStore才能正常运行。

我认为更好的方法是消除孩子->父母之间的依赖关系。但是,如果您有目的地使用 MST 提供的树结构,我的建议在理论上可能比实践中更好。

消除依赖关系的最简单方法是让Store1's 操作/视图的调用者将所需的任何数据作为参数传递。再一次,这在实践中并不总是有意义的。

于 2019-02-25T17:18:51.213 回答