leiwuhen-67's blog leiwuhen-67's blog
首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)

我的公众号

首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)
  • React

    • 使用React脚手架快速搭建项目
    • hooks之useEffect
    • React之事件绑定及简写方式
    • React之props传值并对其进行限制
    • React之Refs的基本使用
    • React之生命周期钩子
    • React之key的使用
    • React之代理服务器配置
    • React之封装全局Loading组件
    • React之消息的发布-订阅(pubsub-js)
    • React之Redux的基本使用
    • React之react-redux的基本使用
    • React之redux的数据持久化存储
    • React之路由懒加载
    • React之Render Props的使用
    • React之createBrowserRouter
    • React之路径别名@配置
    • React之craco打包优化配置
    • React之项目国际化
    • React之postcss-pxtorem移动端适配
    • React之使用vite创建项目
    • React之ts类型标注汇总
    • React之使用 ant design搭建后台管理之踩坑
    • React之路由切换动画
    • React之使用vite创建组件库并发布到npm
    • React之项目打包部署到nginx
    • React之自定义组件添加className与style
  • React Native

  • 《React》笔记
  • React
心欲无痕
2024-03-22

React之redux的数据持久化存储

我们在使用 redux 的时候,发现有个问题,就是刷新页面后,数据会丢失,这时候我们希望数据能持久化存储,而 redux 中刚好有这样一款中间件,能够持久化保存数据,它就是 redux-persist。

1、安装中间件 redux-persist

npm install redux-persist
1

2、配置 persistStore 和 persistReducer

// /src/react-redux/index.js
import { configureStore, combineReducers } from '@reduxjs/toolkit';
import { persistStore, persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";  // 默认是localStorage存储
//import storageSession  from 'redux-persist/lib/storage/session'; //存储到sessionStorage
import countReducer from './reducers/countReducer';
import studentReducer from "./reducers/studentReducer"

// 设置持久化配置
const persistConfig = {
    key: "my-redux", // key是必须要配置的
    storage,   // 选择存储方式,localStorage还是sessionStorage
    whitelist: ["countReducer", "studentReducer"],  // 选择需要持久化存储的数据
    blacklist: [],  // 配置黑名单,选择不需要持久化存储的数据
}

/*
 合并reducer,将多个reducer函数合并为一个最终的 reducer 函数
 */
const rootReducer = combineReducers({
    countReducer,
    studentReducer
})

// 创建持久化reducer
const persistedReducer = persistReducer(persistConfig, rootReducer)

// 使用configureStore方法创建store配置如下:
export const store = configureStore({
    reducer: persistedReducer,
    // 关闭redux序列化检测,否则会报错,类似A non-serializable value was detected in an action
    middleware: (getDefaultMiddleware) => getDefaultMiddleware({
        serializableCheck: false
    })
})

// 使用createStore方法创建store配置如下,此时需要从redux中引入createStore:
// export const store = createStore(persistedReducer)

export const persistor = persistStore(store)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

3、在项目根目录下的 index.js 中配置如下

import React, {StrictMode} from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { Provider } from 'react-redux'
import { PersistGate } from 'redux-persist/integration/react'
import { persistor, store } from "./reactRedux/index"


ReactDOM.render(
    <StrictMode>
        <Provider store={store}>
            <PersistGate persistor={persistor}>
                <App />
            </PersistGate>
        </Provider>
    </StrictMode>,
  document.getElementById('root')
);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

至此,数据持久化存储就搞定了

编辑 (opens new window)
上次更新: 3/4/2025, 5:46:30 PM
React之react-redux的基本使用
React之路由懒加载

← React之react-redux的基本使用 React之路由懒加载→

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式