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

ngrx/strore example app, why child state extends root state?

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

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

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

1
2
3
4
export interface AuthState {
  status: fromAuth.State;
  loginPage: fromLoginPage.State;
}

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

这里是根状态

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

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

1
2
3
4
5
{
  root: rootState,
  auth: authState,
  books: booksState
}

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


按照app\
educers\\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 为您提供有关可从此功能模块访问的完整状态的信息(功能模块状态顶级状态)。在相同的名称下,您应该根据功能模块保留不同的信息。这是一个很好的做法。