ngrx / сущность для всего состояния или части - PullRequest
0 голосов
/ 28 марта 2020

Я не уверен, что понимаю пакет @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<?> {
}

И что я должен поставить вместо ? У меня много свойств.

или

каждая модель интерфейса ListItems, FooObject должна расширяться EntityState?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Нельзя использовать более одного 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
})

...
0 голосов
/ 29 марта 2020

Согласно схеме, если FooObject является сущностью, а ListItems является сущностью, у вас должно быть 2 отдельных адаптера сущности для них. Поскольку EntityState отвечает за управление одной сущностью.

вместо property1: ListItems[]; и others: FooObject[], я бы рекомендовал хранить только идентификаторы string[] или 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

Позже в коде вы можете выбрать флаг загрузки, и как только он будет завершен, чтобы получить свои идентификаторы и выбрать ListItems и FooObject с помощью оператора withLatestFrom rx js.

...