React 之 redux-toolkit + redux-persist 持久化

注:redux-toolkit 我之前的文章:文章链接

使用 redux-persist 之前的代码

src/redux/index.tsx

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

import menuReducer from "./modules/menu/menu";
import globalReducer from "./modules/global";


export const store = configureStore({
  reducer: {
    menu: menuReducer,
    global: globalReducer,
  },
});

使用 redux-persist

安装:

npm i redux-persist

1. 使用 persistStore 和 persistReducer

修改 src/redux/index.tsx

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

import { persistStore, persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";

import menuReducer from "./modules/menu/menu";
import globalReducer from "./modules/global";


const rootReducer = combineReducers({
  menu: menuReducer,
  global: globalReducer,
});

// 持久化配置
const persistConfig = {
  key: "root",
  storage,
};
const persistedReducer = persistReducer(persistConfig, rootReducer);

export const store = configureStore({
  reducer: persistedReducer,
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: false,
    }),
});

export const persistor = persistStore(store);

2. 使用 PersistGate 包装根组件

src/index.tsx

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import { Provider } from "react-redux";
import { PersistGate } from "redux-persist/integration/react";
import { persistor, store } from "./redux";
import "@/styles/reset.scss";


const root = ReactDOM.createRoot(
  document.getElementById("root") as HTMLElement
);
root.render(
  // <React.StrictMode>
  <Provider store={store}>
    <PersistGate loading={null} persistor={persistor}>
      <App />
    </PersistGate>
  </Provider>

  // </React.StrictMode>
);

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值