MST: Как правильно создать основной магазин? - PullRequest
0 голосов
/ 11 января 2019

Я хочу создать 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 голосов
/ 15 января 2019

Здесь 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

Я думаю, что это лучший способ использовать его в вашем случае.

...