Angular Redux извлекает данные в состояние, используя сущности - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть такой редуктор:

export interface State extends EntityState<PackageScenario> {
  loading: boolean;
}

export const adapter: EntityAdapter<PackageScenario> = createEntityAdapter<PackageScenario>({
  selectId: packageScenario => packageScenario.id
});

export const initialState = adapter.getInitialState({
  loading: false
});

const _psReducer = createReducer<State>(
  initialState,
  on(getPackageScenariosActionInit, state => ({...state, loading: true})),
  on(getPackageScenariosActionSuccess, (state, {packageScenarios}) => 
    adapter.upsertMany(packageScenarios, {...state, loading: false})
  )
);

export function psReducer(state: State | undefined, action: Action) {
  return _psReducer(state, action);
}

У меня проблема с этой строкой: on(getPackageScenariosActionSuccess, (state, {packageScenarios}) => adapter.upsertMany(packageScenarios, {...state, loading: false})

На консоли я получил ошибку

ОШИБКА TypeError: entity не повторяется

Есть идеи, почему это не работает?

- UPDATE

Действие:

export const getPackageScenariosActionSuccess = createAction(
  '[Package Scenario] Success get package scenarios',
  props<{ packageScenarios: PackageScenario[];} >()
);

-ОБНОВЛЕНИЕ

Полная трассировка стека

ОШИБКА TypeError: сущности не могут быть повторяемы в upsertManyMubly (https://localhost:4200/vendor.js:170842:30) в Object.operation [as upsertMany] (https://localhost:4200/vendor.js:170597:27))в https://localhost:4200/main.js:2656:505 в https://localhost:4200/vendor.js:174937:26 в psReducer (https://localhost:4200/main.js:2661:12) в комбинации (https://localhost:4200/vendor.js:173590:37) в https://localhost:4200/vendor.js:174394:27 в https://localhost:4200/vendor.js:173670:20 в computeNextEntry (https://localhost:4200/vendor.js:172508:21) в пересчитать состояние (https://localhost:4200/vendor.js:172561:15)

1 Ответ

0 голосов
/ 05 ноября 2019

Я нашел проблему. В действии я передаю объект { PackageScenario[] }, но в сервисе, куда отправляется действие, я передаю только массив.

В обслуживании было:

this.hubConnection.on('GetPackageScenariosList', (packageScenarios: PackageScenario[]) => {
          this.store$.dispatch(PSActions.getPackageScenariosActionSuccess(packageScenarios));
        });

Должно быть:

this.hubConnection.on('GetPackageScenariosList', (packageScenarios: PackageScenario[]) => {
          this.store$.dispatch(PSActions.getPackageScenariosActionSuccess({packageScenarios}));
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...