NgRx效果将动作和选择器与道具结合在一起

时间:2018-10-17 18:40:14

标签: angular ngrx redux-observable ngrx-effects


我正在派遣一个动作,我想处理副作用。
动作的有效载荷是id。在Effect内部,我想从商店中将select与传递的id的对象并与action组合。
我在Effect逻辑上遇到了问题。

Action

export class ActionX implements Action {
  readonly type = ActionTypes.ActionX;

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

Selector

export const selectById = createSelector(
  selectState,
  (state: XState, props) => {
    let index = state.entities.findIndex(obj => obj.id === props.id);
    if (index >= 0) {
      return state.entities[index];
    }
    return undefined;
  }
);

到目前为止,我有Effect

@Effect({ dispatch: false })
  actionX$ = this.actions$
    .pipe(
      ofType<ActionX>(ActionTypes.ActionX),
      withLatestFrom((action: ActionX) => this.store.pipe(select(selectById, { id: action.payload.id }))),
      ...
    );

...是我不知道该怎么做的地方。
通常我会做mergeMap(([action, obj]) => // do something )),但是WebStorm指出[action, obj]的类型为Observable<MyObj>,而不是数组类型。

PS:我有dispatch: false,所以当我弄清楚如何处理操作员时,它不会抛出错误。我将使用先前操作中的一些信息来调度和操作。

编辑
现在我知道withLatestFrom不能是带有参数的箭头函数。
我可以在stackoverflow上找到它:

map((action: LocalSubServiceTemplateActions.LoadLocalSubService) => action.payload.globalSubServiceId),
    (globalSubServiceId) => {
        return withLatestFrom(this.store.pipe(select(fromLocalSubservices.getSearchParams(globalSubServiceId))));
    },

但是无法解决,因此管道内的下一个运算符会接收到带有[action, obj]的数组。

0 个答案:

没有答案