Reducer和Epic中的无限循环

问题描述

我使用过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],};

我检查了一下,然后在减速器上获得了正确的有效载荷,但是它进入了他和史诗之间的无限循环。

有什么想法吗?

解决方法

所有的问题都是在指定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;

在类型界面中...

现在一切正常!