NGRX 动作/效果上的多个有效负载

mer*_*rko 0 javascript mongodb ngrx ngrx-effects angular

我需要向 API 发送一个 put 请求,ngrx/effect但该请求需要 id 和内容,以便 MongoDB 能够找到帖子。

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

export class UpdatePost implements Action {
    readonly type = UPDATE_POST

    constructor(public payload: string & Post ) { }
}
Run Code Online (Sandbox Code Playgroud)

这是效果:

@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}))
}
Run Code Online (Sandbox Code Playgroud)

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

我想我的操作有效负载应该以其他方式设置,我是新手,ngrx所以欢迎提出建议。

gen*_*ane 5

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

export class UpdatePost implements Action {
  readonly type = UPDATE_POST

  constructor(public id: string, public payload: Post ) { }
}
Run Code Online (Sandbox Code Playgroud)

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

@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}))
}
Run Code Online (Sandbox Code Playgroud)