Redux中createStore已弃用,寻求替代实现方案
替代Redux弃用的createStore的方案
Redux的createStore API已被官方弃用,目前推荐两种替代方案,优先选择Redux Toolkit(RTK)的configureStore(官方最佳实践),也可使用兼容APIlegacy_createStore作为临时过渡。
方案一:使用Redux Toolkit的configureStore(推荐)
Redux Toolkit是Redux官方推出的工具集,内置了combineReducers、thunk中间件、DevTools集成等功能,大幅简化代码并遵循最佳实践。
1. 安装依赖
如果还未安装Redux Toolkit,执行以下命令:
npm install @reduxjs/toolkit react-redux # 或使用yarn yarn add @reduxjs/toolkit react-redux
2. 修改store.js
替换原有的createStore实现,使用configureStore:
import { configureStore } from '@reduxjs/toolkit'; // 导入你的reducers(示例:import counterReducer from './counterSlice') export const store = configureStore({ reducer: { // 在这里挂载你的reducers,格式:[slice名称]: [reducer函数] // 示例:counter: counterReducer }, // 如需添加自定义中间件,可通过以下方式扩展默认中间件(默认已包含thunk) // middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(yourCustomMiddleware) }); export default store;
3. 修正index.js的React渲染逻辑(React 18+)
原代码中的React.render是React 17及以下的写法,React 18需改用createRoot:
import React from 'react'; import ReactDOM from 'react-dom/client'; import { Provider } from 'react-redux'; import store from './store'; import './bootstrap.min.css'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <Provider store={store}> <App /> </Provider> </React.StrictMode> ); reportWebVitals();
方案二:使用兼容API legacy_createStore(不推荐)
若暂时不想迁移到RTK,可使用Redux保留的兼容APIlegacy_createStore,仅需替换原代码中的createStore:
import { legacy_createStore, combineReducers, applyMiddleware } from 'redux'; import thunk from 'redux-thunk'; import { composeWithDevTools } from 'redux-devtools-extension'; const reducer = combineReducers({}); const initialState = {}; const middleware = [thunk]; const store = legacy_createStore( reducer, initialState, composeWithDevTools(applyMiddleware(...middleware)) ); export default store;
注意:此方案仅为临时兼容,官方强烈建议迁移到Redux Toolkit以获得更好的开发体验和代码可维护性。
内容的提问来源于stack exchange,提问作者meso96
相关产品推荐
相关产品推荐

