Получить родительские данные от ребенка - PullRequest
0 голосов
/ 22 февраля 2019

Какой способ лучше?Я думаю, чем первый путь лучше.Импортировать родительский элемент в child выглядит для меня странно, но, возможно, я ошибаюсь.

RootStore:

export const RootStore = types
  .model('RootStore', {
    store1: types.optional(Store1, {}),
    store2: types.optional(Store2, {}),
    store3: types.optional(Store3, {}),
    store3: types.optional(Store4, {}),
    name: 'name'
  })

export const rootStore = RootStore.create()

Первый способ:

export const Store1 = types
  .model('Store1', {
    some: ''
  })
  .views(self => ({
    get rootStore() {
      return getParent(self)
    },
    get name() {
      return self.rootStore.name
    }
  }))

Второй способ:


import { rootStore } from './rootStore'

export const Store1 = types
  .model('Store1', {
    some: ''
  })
  .views(self => ({
    get name() {
      return rootStore.name
    }
  }))

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Если все, что вам нужно, это получить доступ к корневому узлу в дереве, то для этого случая есть специальная вспомогательная функция - getRoot (self) .

Для данного объектав дереве модели возвращает корневой объект этого дерева.

0 голосов
/ 25 февраля 2019

Все ответы на этот вопрос, вероятно, будут самоуверенными.

Если вы собираетесь это сделать, я думаю, что первый способ лучше.Просто потому, что это означает, что ребенку не нужно ничего знать о своем родителе, кроме того, что он раскрывает свойство name.

При этом я действительно не большой поклонник обоих подходов.

Используете ли вы getParent или закрытие, это поощряет соединение двух моделей.Это приводит к снижению модульности и более сложному тестированию, поскольку каждый Store1 должен быть дочерним по отношению к RootStore для правильной работы.

Я думаю, что лучшим подходом было бы удаление зависимости между child-> parent.Однако, если вы целенаправленно используете древовидную структуру, которую предоставляет MST, моё предложение может быть лучше в теории, чем на практике.

Самый простой подход к удалению зависимости состоит в том, чтобы иметь вызывающего Store1.Действия / представления передают все необходимые данные в качестве параметров.Еще раз, это не всегда имеет смысл на практике.

...