所以我要拿到Uncaught Error: when using a middleware builder function, an array of middleware must be returned

这是我的代码

import {
  configureStore,
  compose,
  combineReducers,
  applyMiddleware
} from "@reduxjs/toolkit";
import thunk from "redux-thunk";

const rootReducer = combineReducers({});

const middleware = applyMiddleware(thunk);
const composeWithDevTools = 
  window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const composedMiddleWare = composeWithDevTools(middleware)

const store = configureStore({
  reducer: rootReducer,
  middleware: composedMiddleWare,
  devTools: 
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
})

export default store;

我不知道出了什么问题,搜索似乎没有返回任何有用的结果.

推荐答案

redux-toolkit中的configureStore(RTK)与redux createStore函数的工作方式不同.middleware属性接受要安装的一组中间件,RTK处理应用它们.

configureStore

/**
 * An array of Redux middleware to install. If not supplied, defaults to
 * the set of middleware returned by `getDefaultMiddleware()`.
 */
middleware?: ((getDefaultMiddleware: CurriedGetDefaultMiddleware<S>) => M) | M

请注意,虽然applyMiddleware是从redux再出口的,但

您应该不需要直接使用它.

以下是您将使用的代码:

import { configureStore, combineReducers } from "@reduxjs/toolkit";
import thunk from "redux-thunk";

const rootReducer = combineReducers({});

const store = configureStore({
  reducer: rootReducer,
  middleware: [thunk], // <-- array of middlewares to install/apply
  devTools: window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
});

export default store;

RTK还附带了固执己见的优化:

  1. 默认情况下,devTools是启用的,只有当您有自定义需求时才会使用此选项.

  2. THUNK中间件也已经包括在default middleware中,例如,如果没有提供middleware属性,则提供getDefaultMiddleware,并返回以下中间件值,其中包括thunk中间件:

    const middleware = [
      actionCreatorInvariant,
      immutableStateInvariant,
      thunk, // <-- included thunk middleware!
      serializableStateInvariant,
    ]
    

    同样,如果您需要定制immutabilityserialization个中间件,那么您实际上只需要指定middleware属性.

您的store 配置可以减少到以下几点:

import { configureStore, combineReducers } from "@reduxjs/toolkit";

const rootReducer = combineReducers({});

const store = configureStore({
  reducer: rootReducer,
});

export default store;

Thunk中间件和开发工具都将处于活动和工作状态.

Reactjs相关问答推荐

客户端组件中服务器组件的两难境地

如何使用Reducer更新全局变量

useTranslation不会在languageChanged上重新呈现组件

获取未捕获的错误:Gatsby生产版本上的最小化react 错误#418

FireBase Reaction Native-在呈现视图之前等待响应

更改滑块标记的文本 colored颜色 ./Reaction/MUI 5

列表中的每个子项都应该有一个唯一的keyprops .在react 应用程序中

使用获取的数据更新状态,但在try console.log 时它给出未定义

Mui Datepicker 设置了错误的日期

如何将 MUI X 数据网格单元格方向更改为行级而不是列级?

为什么 useEffect 的初始化对于加载 localStorage 不起作用?

从 redux 调用UPDATE_DATA操作时状态变得未定义

如何让 useEffect 在 React.JS 中只运行一次?

使用 nextjs App Router 在动态客户端进行服务器端渲染

为什么我的 Next.js (React) 组件只有在页面中时才有效?

当 React 中的状态发生变化时如何停止重新加载谷歌 map ?

使用 React 中的功能组件更改另一个组件的状态

理解 React 中的 PrevState

为什么 React 会多次调用我的应用程序的某些函数?

如何在按钮左下角制作 Material UI 菜单下拉菜单