我想创建包含其他商店的rootStore。问题在于子级包含以下属性:
id: types.identifier(types.string),
当我创建rootStore时,我从孩子那里得到了一个错误:
[mobx-state-tree]将
{}
转换为SomeModelStore
时出错:在路径“ / id”值undefined
不能分配给类型:identifier(string)
(值不是字符串),则应使用identifier(string)
的实例或identifier(string)
之类的快照。
我尝试使用types.late
,但没有帮助。
我找到的解决方案是将所有属性包装到types.maybe
示例:
错误: https://codesandbox.io/s/yvnznxyvyj?module=%2Fmodels%2FSomeModelStore.js
解决方法: https://codesandbox.io/s/0mv558yq50?module=%2Fmodels%2FSomeModelStore.js
答案 0 :(得分:0)
https://codesandbox.io/s/yvnznxyvyj?module=%2Fmodels%2FSomeModelStore.js在这里您创建了一个空对象
.model("FirstStore", {
item: types.optional(SomeModelStore, {})
})
但输入
SomeModelStore
不支持空白字段。如果你这样写
export const FirstStore = types
.model("FirstStore", {
item: types.optional(SomeModelStore, {
id: 'defaultId',
activate: false,
name: 'defaultName'
})
})
它将起作用。或者,您可以使用“ types.maybe”代替“ types.optional”。
export const FirstStore = types
.model("FirstStore", {item: types.maybe(SomeModelStore)})
另请参阅types.reference
我认为这是在您的情况下使用它的更好方法。