angular - ngrx/strore 示例应用程序,为什么子状态扩展根状态?

标签 angular ngrx-store

我正在玩 ngrx-store 的示例应用程序 https://github.com/ngrx/platform/tree/master/example-app无法找出“app\auth\reducers\index.ts”文件中的一段代码

export interface State extends fromRoot.State {
  auth: AuthState;
}

在同一个文件中我们已经有了描述状态的接口(interface)

export interface AuthState {
  status: fromAuth.State;
  loginPage: fromLoginPage.State;
}

那么为什么我们应该创建另一个状态,更重要的是,为什么这个新状态应该扩展根状态?

这是根状态

export interface State {
  layout: fromLayout.State;
  routerReducer: fromRouter.RouterReducerState<RouterStateUrl>;
}

难道整个状态不就是一个包含所有子状态的对象,比如 auth 状态和 books 状态吗?所以它看起来像

{
  root: rootState,
  auth: authState,
  books: booksState
}

然后,当子状态扩展根状态时,它只是向子状态添加了更多信息,这与它无关?那么在这种情况下,authStatebooksState 包含与 rootState 包含的信息相同的信息加上它自己的信息?

最佳答案

按照 app\reducers\index.ts 中的注释:

As mentioned, we treat each reducer like a table in a database. This means our top level state interface is just a map of keys to inner state types.

在此示例中,interface AuthState 描述了功能模块的状态。

interface State extends fromRoot.State 为您提供有关可从此功能模块访问的完整状态的信息(功能模块状态 + 顶级状态)。同名下,根据不同的特性模块保留不同的信息。这是一个很好的做法。

关于angular - ngrx/strore 示例应用程序,为什么子状态扩展根状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47366774/

相关文章:

angular - Ag-grid:如何在使用 AggFunc 时更改定义列 headerName?

Angular NGRX - 为 Redux-Devtools 命名商店/应用程序实例

angular - 是否应该触发所有 reducer 的 ngrx 操作

Angular 6 - 解析器 + Guard + ngrx

redux - 如何使用 ngFor 以角度获取和显示 ngrx 存储数据

angular - 使用 systemjs.config.js 时如何创建 angular 2 build 文件夹

javascript - Angular 2 模块.id

javascript - 无法获得涉及 Angular 上的 Jasmine spy 的有效断言

Angular2 DI 与 ES2016 装饰器?

angular - ngrx 8 : Access state of @ngrx/data entity from reducer function