0

我不确定我是否理解@ngrx/entity包。当然有例子,但我没有发现任何一个状态大于一个属性/主题的例子。

所以在使用@ngrx/entity我的子状态之前,如下所示。是的,它实际上是一个子状态。这意味着我对每个功能进行了分离,但它仍然不是单一属性接口。我有几个模型接口,State 由它们组成。那些是我想用“实体特征”替换的数组。从示例中我看到实体适用于整个州?

export interface ListItems {
}

export interface FooObject {
}

export interface State {
  property1: ListItems[];
  others: FooObject[];
  name: string;
  isLoading: boolean;
  error: string;
}

那么要使用 Enity 我应该怎么做呢?

export interface State extends EntityState<?> {
}

我应该用什么来代替?我有很多属性。

或者

每个模型接口ListItemsFooObject应该扩展EntityState吗?

4

2 回答 2

0

您不能使用多个entityAdapter/ 状态接口,因为实体适配器是为该接口键入的。您可以在状态的一个切片中添加一些额外的字段,但不能再添加数组。前任:

export interface MyEntity {
  id: string;
  name: string;
}

export interface MyEntityState extends EntityState<MyEntity> {
  // Additional props
  loading: boolean;
  loaded: boolean;
}

export const adapter: EntityAdapter<MyEntity> = createEntityAdapter<MyEntity>();

const _initialState = adapter.getInitialState({
  loading: false,
  loaded: false
})

...
于 2020-04-07T06:54:31.040 回答
0

根据设计,如果FooObject是一个实体并且ListItems是一个实体,则您应该为它们提供 2 个单独的 EntityAdapter。因为 EntityState 负责管理单个实体。

而不是,property1: ListItems[];others: FooObject[]建议只存储 idstring[]number[].

在这里您可以找到如何使用@ngrx/entity 管理多种类型的实体的示例: https ://github.com/satanTime/ngrx-entity-relationship/blob/master/e2e/angular9/src/app/store/user /user.reducer.ts https://github.com/satanTime/ngrx-entity-relationship/blob/master/e2e/angular9/src/app/store/address/address.reducer.ts

稍后在代码中,您可以选择加载标志,一旦完成就可以获取其 idListItemsFooObject通过withLatestFromrxjs 运算符进行选择。

于 2020-03-29T11:44:47.770 回答