从孩子那里获取父母数据

时间:2019-02-21 23:02:39

标签: mobx-state-tree

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

RootStore:

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
    }
  }))

2 个答案:

答案 0 :(得分:0)

对这个问题的所有答案都可能会被接受。

如果您要这样做,我认为第一种方法更好。仅仅因为这意味着孩子除了暴露了name属性外,就不需要了解其父级的任何信息。

话虽这么说,我真的不是这两种方法的忠实粉丝。

无论您使用getParent还是闭包,都可以促进两个模型的耦合。由于每个Store1必须是RootStore的子代才能正常运行,因此导致模块化程度降低和测试难度加大。

我认为一个更好的方法是删除child-> parent之间的依赖关系。但是,如果您有目的地利用MST提供的树结构,那么我的建议在理论上可能比实际更好。

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

答案 1 :(得分:0)

如果您只需要访问树中的根节点,那么将有专门针对这种情况的专用帮助程序功能-getRoot(self)

  

给出模型树中的一个对象,返回该树的根对象。