哪种方法更好?我认为比第一种方法更好。在孩子中导入父母对我来说很奇怪,但也许我错了。
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
}
}))
答案 0 :(得分:0)
对这个问题的所有答案都可能会被接受。
如果您要这样做,我认为第一种方法更好。仅仅因为这意味着孩子除了暴露了name
属性外,就不需要了解其父级的任何信息。
话虽这么说,我真的不是这两种方法的忠实粉丝。
无论您使用getParent
还是闭包,都可以促进两个模型的耦合。由于每个Store1
必须是RootStore
的子代才能正常运行,因此导致模块化程度降低和测试难度加大。
我认为一个更好的方法是删除child-> parent之间的依赖关系。但是,如果您有目的地利用MST提供的树结构,那么我的建议在理论上可能比实际更好。
消除依赖项的最简单方法是让Store1
的操作/视图的调用者将所需的任何数据作为参数传递。再一次,在实践中这并不总是有意义。
答案 1 :(得分:0)
如果您只需要访问树中的根节点,那么将有专门针对这种情况的专用帮助程序功能-getRoot(self)。
给出模型树中的一个对象,返回该树的根对象。