【问题标题】:MST: How to create the main store correctly?MST:如何正确创建主商店?
【发布时间】:2019-06-06 14:10:29
【问题描述】:

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

【问题讨论】:

    标签: javascript mobx mobx-state-tree


    【解决方案1】:

    这里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

    我认为在您的情况下使用它是一种更好的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2012-10-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 2015-10-16
      相关资源
      最近更新 更多