ngrx - объединить данные - PullRequest
       14

ngrx - объединить данные

0 голосов
/ 05 октября 2018

Я только учусь ngrx , не могу понять, как изменить модель / слияние, просто простые изменения.Я получил данные в ngOnInit:

this.store.dispatch (new GetHeroes ());

this.heroes $ = this.store.select (fromSelectors.getParticipants);

this.store.dispatch (new GetClients ());

this.clients $ = this.store.select (fromSelectors.getClients);

Перед отображением героев $ данных в HTML , мне нужно this.heroes $ .push ({name: 'newName'}) и this.heroes $ .push (this.clients $ [0]) Но мои модели выглядят так: Store: {actionsObserver: {....}}

Я полностью сбит с толку, помогите, пожалуйста, как это сделать, следуя правилам REDUX

Просто некоторые файлы магазина:

//hero.actions.ts
...
export enum HeroActionTypes {
  heroGetHeroes = '[Hero] get',
  heroGetHeroesSuccess = '[Hero] get heroes success',
  .....
}


export class GetHeroes implements Action {
  readonly type = HeroActionTypes.heroGetHeroes;
}
export class GetHeroesSuccess implements Action {
  readonly type = HeroActionTypes.heroGetHeroesSuccess;
  constructor(public payload: Hero[]) {}
}

//hero.effects.ts
...
  @Effect()
  loadHeroes$ = this.actions$.pipe(
    ofType(HeroActionTypes.heroGetHeroes),
    switchMap(() =>
      this.heroService
        .getHeroes()
        .pipe(
          map(heroes => new GetHeroesSuccess(heroes)),
          catchError(error => of(new HeroError(error)))
        )
    )
  );
// hero.reducer.ts
switch (action.type) {
    case HeroActionTypes.heroGetHeroes:
      return {
        ...state,
        loading: true
      };
    case HeroActionTypes.heroGetHeroesSuccess:
      return adapter.addAll(action.payload, {
        ...state,
        loading: false,
        loaded: true
      });
// hero.selectors.ts
export const getHeroes = createSelector(getHeroEntities, entities => {
  return Object.values(entities);
});

также практически идентичный код для клиентов

1 Ответ

0 голосов
/ 05 октября 2018

Мне нужно this.heroes $ .push ({name: 'newName'}) и this.heroes $ .push (this.clients $ [0])

Thisгде все пошло не такВам не нужно это делать, и вы не должны этого делать.Единственное место, где можно изменить состояние - это внутри редукторов.

Чтобы решить вашу проблему, вы должны отправить успешное действие из ваших эффектов с данными в качестве полезной нагрузки, как вы уже это делаете.Отправленное действие из вашего эффекта проходит через редуктор, где вы можете вернуть новое состояние.Я вижу, что вы используете @ngrx/entity, то есть функция addAll добавит новые сущности в ваше состояние.

Где именно это идет не так, или вам нужно объяснение последовательности действий?Потому что ваши фрагменты действительны.

...