1

我想创建包含其他商店的 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

4

1 回答 1

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

我认为这是在您的情况下使用它的更好方法。

于 2019-01-15T19:24:43.513 回答