MST:如何正确创建主商店?

时间:2019-01-11 16:09:19

标签: javascript mobx mobx-state-tree

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

1 个答案:

答案 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

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