Корневое / глобальное состояние NGRX и перекрестный выбор состояний объектов - PullRequest
0 голосов
/ 20 ноября 2018

Предполагается, что у нас есть приложение с разделами для графиков игр, игроков, команд. Как бы вы структурировали свои приложения / состояния функций?

Моя первоначальная мысль состояла в том, чтобы разбить их на функциональные состояния / модули:

app/
├── games/
│   ├── store/
│   └── games.module.ts
├── players/
│   ├── store/
│   └── players.module.ts
├── teams/
│   ├── store/
│   └── teams.module.ts
└── app.module.ts

С каждой функцией, отвечающей за методы CRUD для каждого типа данных (игры, игроки, команды).

Но в случае игр вы захотите указать, какие команды играли ... И вы, скорее всего, сохраняете ссылки на каждую команду только в состоянии игры:

games: {
  game1Id: {
    home: team1Id,
    away: team2Id,
  }
  ...
}

Аналогично для просмотра команд вы захотите увидеть игроков, связанных с командой ... И опять же, скорее всего, хранится только ссылка на идентификатор игрока для каждой команды.

Должно ли каждое из этих состояний / данных действительно находиться в глобальном состоянии, а не в состоянии функции, где каждый функциональный модуль может выбирать их из подхода «сверху вниз»? Имеет ли смысл структурирование функционального модуля?

Или допустимо "охватить" функциональный модуль / состояния?

Или есть другой способ, который я не рассмотрел?

1 Ответ

0 голосов
/ 20 ноября 2018

Как обычно, это зависит.

Лично, я бы сказал, если вы можете разделить его на разные редукторы или даже функции - сделайте это.

Редуктор знает только о своем состоянии, а не обо всем состоянии приложения, существуют способы доступа к различным слоям состояния приложения:

  • Добавление его в отправленное действие
  • Создайте редуктор, обрабатывающий оба состояния, с помощью того, что redux называет редуктором "case function"

Например:

switch (action.type) {
   case "FOO":
     return fooReducer(state, action);
   case "BAR":
     return barReducer(state, action);
   default:
     return state;
}

Для создания моделей представлений вы действительно можете охватить функциональные модули / состояния, если используете селекторы. Например, вы можете создать селектор, комбинирующий несколько меньших селекторов из разных модулей.

Дополнительная информация: Арахис обменивается данными между модулями Документы Redux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...