Получение новых данных из шаблона Эффект / Редуктор / Действие - PullRequest
0 голосов
/ 14 ноября 2018

Хорошо, я не могу понять, как сделать это более эффективно.Честно говоря, я не очень хорошо понимаю эту схему, но меня бросили в глубокий конец.Таким образом, у меня есть решатель, получающий наблюдаемый для соответствующего Плана для формы.Тем не менее, благодаря странице, с которой я перемещаюсь, я эффективно выполнил небольшую загрузку плана, которая хранится в состоянии.Поэтому, когда происходит загрузка, а не возвращение полностью перемещенного объекта, я получаю небольшую нагрузку.Единственное, что я понял, как это исправить - это сначала удалить его из состояния.Это кажется глупым .Как настроить эффект для удаления / загрузки, возможно, передав параметр?

export class PlanResolver implements Resolve<Observable<Plan>> {

  public plan$: Observable<Plan>;

  constructor(public store: Store<fromRoot.State>) {
    this.plan$ = store.select<Plan>(fromRoot.getSelectedPlan);     
  }

  resolve(route: ActivatedRouteSnapshot) {
    let id = +route.paramMap.get('id');

    console.info(id);

    this.store.dispatch(new PlanActions.Remove(id));  //This seems silly
    this.store.dispatch(new PlanActions.Load(id));

    return of(this.plan$);
  }

Редуктор:

case PlanActionTypes.LoadSuccess: {
  return adapter.addOne(action.payload, {
    ...state,
    selectedPlanId: state.selectedPlanId,
  });
}

case PlanActionTypes.Load: {
  return {
    ...state,
    selectedPlanId: action.payload,
  };
}

Эффект:

@Effect()
  loadPlan$: Observable<Action> = this.actions$
    .ofType<Load>(PlanActionTypes.Load).pipe(
      switchMap(action => this.planService.getPlan(action.payload)),
      map((plan: Plan) => new LoadSuccess(plan)),
      catchError(err => {
        toastr.error(`Could not load plan.`); 
        console.error(err);
        return of(new LoadFail(err));
      })
    );

Действие:

 export class Load implements Action {
  readonly type = PlanActionTypes.Load;

  constructor(public payload: number) {}
}

export class LoadSuccess implements Action {
  readonly type = PlanActionTypes.LoadSuccess;

  constructor(public payload: Plan) {}
}

export class LoadFail implements Action {
  readonly type = PlanActionTypes.LoadFail;

  constructor(public payload: any) {}
}

РЕДАКТИРОВАТЬ: Итак, я получаю план {a: значение b: значение c - z: null}

и я ожидаю Plan {a: value ....z: значение}

Удалив сначала, я получаю ожидаемый результат.

...