NGRX根/全局状态与交叉选择功能状态

时间:2018-11-19 21:48:55

标签: angular ngrx

假设我们有一个应用,其中包含游戏时间表,玩家,团队等部分。您将如何构造应用/功能状态?

我最初的想法是将它们分解为功能状态/模块:

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,
  }
  ...
}

类似于查看团队,您将要查看与该团队关联的玩家...而且,可能只存储了每个团队对playerId的引用。

这些状态/数据中的每一个是否应该真正处于全局状态,而不是每个功能模块都可以从“自顶向下”方法中选择它们的功能状态?功能模块的结构甚至有意义吗?

“跨越”功能模块/状态是否可以接受?

还是我没有考虑过另一种方式?

1 个答案:

答案 0 :(得分:1)

通常,这取决于。

个人而言,我想说的是,如果您可以将其拆分成不同的化简器甚至功能,那就去吧。

Reducer只知道其状态,而不是整个应用程序状态,有几种方法可以访问应用程序状态的不同部分:

  • 将其添加到您的已调度操作中
  • 创建一个处理两种状态的化简器,redux称之为“ case function”化简器

例如:

{2, 3, 4, 5}

要创建视图模型,如果使用选择器,您确实可以跨功能模块/状态进入。例如,您可以创建一个选择器,将来自不同模块的多个较小的选择器组合在一起。

更多信息: Sharing data between modules is peeanuts The Redux Docs