已调度NGRX动作,但效果未触发

时间:2018-08-21 03:02:56

标签: javascript angular redux rxjs ngrx

我遇到了无法触发NGRX效果的问题。这是我的动作,减速器,效果和组件代码。

这是我的效果中的代码段,我已经用占位符代替了实体和服务的实际名称。

// entity.effects.ts
createEntity$: Observable<Action> = this.actions$.pipe(
  ofType<CreateEntity>(EntityActionTypes.CreateEntity),
  map(action => {
    console.log("here");
    return action.payload;
  }),
  mergeMap(data => {
    return this.service.createEntity(data).pipe(
      map(data => new CreateEntitySuccess(data)),
      catchError(error => of(new CreateEntityError(error)))
    );
  })
);

entity.actions.ts
import { Action } from "@ngrx/store";

export enum EntityActionTypes {
  CreateEntity = "[Entity API] Create Entity",
  CreateEntitySuccess = "[Entity] Create Entity Success",
  CreateEntityError = "[Entity] Create Entity Error"
}

export class CreateEntity implements Action {
  readonly type = CreateEntityActionTypes.CreateEntity;
  constructor(public payload: any) {}
}

// ... CreateEntitySuccess and CreateEntityError are defined here...

export type EntityActionsUnion =
  | CreateEntity
  | CreateEntitySuccess
  | CreateEntityError;

本质上,我有一个容器,该容器在表单提交时调度一个CreateEntity操作。但是,我看不到已写入效果的console.log()。此外,我还有另一个作用,可以从正在工作的LoadEntities上的REST API加载对所有实体的请求。但是,创建新实体的效果不是,我什至不认为它正在触发。

我也没有收到任何错误。这是调度我的操作的代码:

import * as EntityActions from '../actions/entity.actions.ts
createBuilding() {
  const data = this.form.value;
  const image = this.fileUploadComponent.file;
  const payload = {
    data,
    image
  };
  this.store.dispatch(new EntityActions.CreateEntity(payload));
}

我有Redux开发工具,我看到调度触发和loading: true的新状态被返回。但是,效果不会触发,我的“成功”或“错误”调度也不会触发。为什么会这样?

1 个答案:

答案 0 :(得分:2)

您是否用@Effect()装饰了效果方法?那就是我通常会想念的:)