MST: Как правильно создать основной магазин?

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

Теги:
mobx
mobx-state-tree

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню