在 getDefaultMiddlware 配置后 Redux 工具包 thunk 消失
Posted
技术标签:
【中文标题】在 getDefaultMiddlware 配置后 Redux 工具包 thunk 消失【英文标题】:Redux toolkit thunk disappears after getDefaultMiddlware config 【发布时间】:2021-06-21 05:06:36 【问题描述】:我的商店是这样的:
export default configureStore(
reducer:
sequencer: sequencerReducer,
editMode: editModeReducer,
tone: toneReducer,
app: appReducer,
,
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware( immutableCheck: false );
,
);
我有一个有效的 thunk,但我需要这个 immutableCheck: false
配置。一旦设置,它似乎会覆盖默认中间件,并且 thunk 不再起作用。这是我的想法:
export const modCell = (step, noteOn) => (dispatch, getState) =>
const selectedSound = getState().editMode.selectedSound;
dispatch(sequencerSlice.actions.toggleCell( step, selectedSound ));
;
这是我得到的错误:
Error: Actions must be plain objects. Use custom middleware for async actions.
有什么想法吗?
【问题讨论】:
显示您尝试发送的 thunk,以及如何发送它?另外,为什么需要关闭不变性检查? @markerikson 刚刚更新了 thunk。这是在减速器之一(sequencerSlice)中定义的。我有im检查已关闭,因为我正在构建一个具有数千个状态属性的深度嵌套的鼓音序器。检查使应用程序的使用速度太慢。 嗯。与此问题无关,但您能否在github.com/reduxjs/redux-toolkit/issues/926 中发表评论并留下指向您的实际项目存储库的链接,或者将模拟您当前设置的沙箱/存储库放在一起?我想改进不变性检查性能,这听起来像是一个很好的压力测试。 谢谢,我会在几天内完成。 【参考方案1】:我看到了问题。你的middleware
函数没有返回任何东西。你有那个 middleware
箭头函数的花括号,所以它是一个没有隐式返回的函数体。您要么需要添加显式 return
语句,要么通过删除花括号将其更改为隐式返回。因此,您最终根本没有设置任何中间件。
编辑
说清楚,你想要的是:
export default configureStore(
reducer:
sequencer: sequencerReducer,
editMode: editModeReducer,
tone: toneReducer,
app: appReducer,
,
middleware: (getDefaultMiddleware) =>
return getDefaultMiddleware( immutableCheck: false );
,
);
【讨论】:
middleware: (getDefaultMiddleware) => getDefaultMiddleware( immutableCheck: false ); ,
应该变成 middleware: (getDefaultMiddleware) => return getDefaultMiddleware( immutableCheck: false ); ,
或 middleware: (getDefaultMiddleware) => getDefaultMiddleware( immutableCheck: false ),
以上是关于在 getDefaultMiddlware 配置后 Redux 工具包 thunk 消失的主要内容,如果未能解决你的问题,请参考以下文章