我正在派遣一个动作,我想处理副作用。
动作的有效载荷是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]
的数组。