Redux 工具包 thunk 在 getDefaultMiddlware 配置后消失

Nic*_*one 0 thunk redux redux-thunk redux-toolkit

我的商店是这样的:

export default configureStore({
  reducer: {
    sequencer: sequencerReducer,
    editMode: editModeReducer,
    tone: toneReducer,
    app: appReducer,
  },
  middleware: (getDefaultMiddleware) => {
    getDefaultMiddleware({ immutableCheck: false });
  },
});
Run Code Online (Sandbox Code Playgroud)

我有一个工作thunk,但我需要这个immutableCheck: false配置。一旦设置,它似乎会覆盖默认的中间件,并且 thunk 不再工作。这是我的想法:

export const modCell = (step, noteOn) => (dispatch, getState) => {
  const selectedSound = getState().editMode.selectedSound;
  dispatch(sequencerSlice.actions.toggleCell({ step, selectedSound }));
};
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Error: Actions must be plain objects. Use custom middleware for async actions.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

mar*_*son 5

我看到了这个问题。您的middleware函数没有返回任何内容。该箭头函数有大括号middleware,因此它是一个没有隐式返回的函数体。您要么需要添加显式return语句,要么通过删除花括号将其更改为隐式返回。因此,您最终将根本不需要任何中间件设置。

编辑

明确地说,您想要的是:

export default configureStore({
  reducer: {
    sequencer: sequencerReducer,
    editMode: editModeReducer,
    tone: toneReducer,
    app: appReducer,
  },
  middleware: (getDefaultMiddleware) => {
    return getDefaultMiddleware({ immutableCheck: false });
  },
});
Run Code Online (Sandbox Code Playgroud)