Reducer和Epic中的无限循环

时间:2020-08-10 16:47:19

标签: reactjs react-redux rxjs ionic4 redux-observable

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

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

有什么想法吗?

1 个答案:

答案 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;

在类型界面中...

现在一切正常!