我遇到了无法触发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
的新状态被返回。但是,效果不会触发,我的“成功”或“错误”调度也不会触发。为什么会这样?
答案 0 :(得分:2)
您是否用@Effect()
装饰了效果方法?那就是我通常会想念的:)