不推荐使用警告消息“getDefaultMiddleware”

The*_*ram 3 redux redux-thunk redux-devtools react-redux

getDefaultMiddleware更新后我收到一个已弃用的警告"@reduxjs/toolkit": "^1.6.1"那么我应该如何删除这个警告。我们还有其他方法可以在configureStore函数中注入默认中间件吗?

import { configureStore, getDefaultMiddleware } from "@reduxjs/toolkit";
import reducer from "./reducer";
import api from "./middleware/api";
export default function storeConfigure() {
   const store = configureStore({
   reducer,
   middleware: [
      ...getDefaultMiddleware(), 
      api
    ],
  });
  return store;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏谢谢!

小智 13

可以这样使用:

const store = configureStore({
  reducer,
  middleware: (getDefaultMiddleware) => [...getDefaultMiddleware(), api],
})
Run Code Online (Sandbox Code Playgroud)

回调返回一个中间件数组,它会更干净且易于阅读。

  • redux 工具包文档表示,在这种特定情况下使用 concat 数组方法而不是数组解构是一种很好的做法...只是让您知道 ✌️ (7认同)
  • 为了清楚起见,@georgewashingmachine 所指的段落是:“最好使用返回的 MiddlewareArray 的可链接 .concat(...) 和 .prepend(...) 方法,而不是数组扩展运算符,因为后者在某些情况下可能会丢失有价值的类型信息。” 在 https://redux-toolkit.js.org/api/getDefaultMiddleware (4认同)

mar*_*son 11

中的middleware选项configureStore接受回调函数,该回调将getDefaultMiddleware作为其参数给出:

const store = configureStore({
  reducer: rootReducer,
  middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(logger),
})
Run Code Online (Sandbox Code Playgroud)

使用它而不是单独导入的版本。

  • 对于来自 google 的任何人来说,好奇它为何被弃用,这 2 个 RTK Github 问题线程非常值得一读:https://github.com/reduxjs/redux-toolkit/issues/958#issuecomment-875538589 和 https://github .com/reduxjs/redux-toolkit/issues/1324 (3认同)
  • 如果我想“连接”多个自定义中间件怎么办?当我添加多个自定义中间件时,应用程序停止工作。 (2认同)