代码之家  ›  专栏  ›  技术社区  ›  merko

NGRX行动/效果上的多重有效载荷

  •  0
  • merko  · 技术社区  · 7 年前

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

    下面是代码,我尝试设置两个操作有效载荷:

    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和内容。

    我想我的动作有效载荷应该设置为另一种方式,我对 ngrx 因此,欢迎提出任何建议。

    1 回复  |  直到 7 年前
        1
  •  5
  •   gentiane    7 年前

    声明类型为string的变量时(&a);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}))
    }