我使用过useDispatch + createAsyncAction + Epic,但我遇到了无限循环,但并没有真正弄清原因。我也使用Ionic(不要认为这有所作为)
调用组件:
<IonButton
onClick={() => {
dispatch(actions.addMemory.request(dummyMemory));
}}
> Dispatch Test</IonButton>
创建的操作:
"ADD_MEMORY_REQUEST",
"ADD_MEMORY_SUCCESS",
"ADD_MEMORY_FAILURE"
)<Memory, Memory, Error>();
史诗:
action$
) =>
action$.pipe(
filter(isActionOf(memoryActions.addMemory.request)),
mergeMap((action) => {
return of(memoryActions.addMemory.success(action.payload));
})
);
减速器:
console.log("i got to reducer", action.payload);
return {
...state,
memories: [...state.memories, action.payload],
};
我检查了一下,然后在减速器上获得了正确的有效载荷,但是它进入了他和史诗之间的无限循环。
有什么想法吗?
答案 0 :(得分:0)
所有的问题都是在指定RootState的类型之后...我在types.d.ts上有这个
import { StateType, ActionType } from "typesafe-actions";
declare module "typesafe-actions" {
export type Store = StateType<typeof import("./index").default>;
export type RootState = StateType<typeof import("./root-reducer").default>;
export type RootAction = ActionType<typeof import("./root-action").default>;
interface Types {
RootAction: RootAction;
}
}
又失踪了
RootState: RootState;
在类型界面中...
现在一切正常!