NGRX 上的多个负载 action/effect

Multiple payload on NGRX action/effect

我需要使用 ngrx/effect 向 API 发送一个放置请求,但该请求需要 ID 和内容,因此 MongoDB 可以找到 post。

这是代码,我尝试设置两个动作负载:

export class UpdatePost implements Action {
    readonly type = UPDATE_POST

    constructor(public payload: string & Post ) { }
}

效果如下:

@Effect() 
    editPost$: Observable<Action> = this.actions$
    .ofType(PostActions.UPDATE_POST)
    .map((action: PostActions.UpdatePost) => action.payload)
    .switchMap((?) => {
        return this.postService.editPost(id, post);
    })
    .map(editedpost => ({type: PostActions.UPDATE_POST_SUCCESS, payload: editedpost}))
}

editPost()需要两个参数:id和content。

我想我的动作有效负载应该设置为另一种方式,我是 ngrx 的新手,所以欢迎大家提出建议。

当你声明一个类型为string & Post的变量时,意味着这个变量拥有Post的所有方法和string的所有方法。那可能不是你想要的。 您希望您的操作有一个标识符(字符串类型)和一个 post。您可以为此声明一个接口,或者您的操作可以具有多个属性,如:

export class UpdatePost implements Action {
  readonly type = UPDATE_POST

  constructor(public id: string, public payload: Post ) { }
}

那么在你的效果中你可以写:

@Effect() 
    editPost$: Observable<Action> = this.actions$
    .ofType(PostActions.UPDATE_POST)
    .switchMap(action => {
        return this.postService.editPost(action.id, action.post);
    })
    .map(editedpost => ({type: PostActions.UPDATE_POST_SUCCESS, payload: editedpost}))
}