详细讲一下React中Redux的持久化存储(Redux-persist)

embedded/2025/1/8 0:44:31/

1.安装依赖:

npm install redux-persist

2. 基础配置:

// store.js
import { configureStore } from '@reduxjs/toolkit'
import { persistStore, persistReducer } from 'redux-persist'
import storage from 'redux-persist/lib/storage' // 默认是 localStorage// 持久化配置
const persistConfig = {key: 'root',        // 存储的键名storage,           // 存储方式whitelist: ['user', 'settings'],  // 需要持久化的reducerblacklist: ['temp'] // 不需要持久化的reducer
}// 包装 reducer
const persistedReducer = persistReducer(persistConfig, rootReducer)// 创建 store
export const store = configureStore({reducer: persistedReducer,middleware: (getDefaultMiddleware) =>getDefaultMiddleware({serializableCheck: {// 忽略 redux-persist 的动作类型ignoredActions: ['persist/PERSIST']}})
})// 创建持久化 store
export const persistor = persistStore(store)

3.在应用中使用:

// App.jsx
import { Provider } from 'react-redux'
import { PersistGate } from 'redux-persist/integration/react'
import { store, persistor } from './store'function App() {return (<Provider store={store}><PersistGate loading={null} persistor={persistor}><YourApp /></PersistGate></Provider>)
}

4.高级配置:

const persistConfig = {key: 'root',storage,// 数据转换transforms: [encryptTransform({secretKey: 'my-secret-key'})],// 存储版本控制version: 1,migrate: (state) => {// 版本迁移逻辑return Promise.resolve(state)},// 合并策略stateReconciler: autoMergeLevel2
}

5.自定义存储引擎:
 

// 使用 sessionStorage
import createWebStorage from 'redux-persist/lib/storage/createWebStorage'
const sessionStorage = createWebStorage('session')// 使用 AsyncStorage (React Native)
import AsyncStorage from '@react-native-async-storage/async-storage'const persistConfig = {key: 'root',storage: AsyncStorage
}

6.选择性持久化:

// 单独配置某个 reducer
const userPersistConfig = {key: 'user',storage,whitelist: ['profile', 'preferences']
}const userReducer = persistReducer(userPersistConfig, baseUserReducer)// 在 store 中使用
const store = configureStore({reducer: {user: userReducer,other: otherReducer}
})

7.处理持久化状态:

// 监听持久化状态
persistStore(store, null, () => {console.log('重置完成')
}).purge() // 清除持久化数据// 在组件中使用
function App() {return (<PersistGate loading={<LoadingView />}persistor={persistor}onBeforeLift={() => {// 在恢复数据之前执行}}><YourApp /></PersistGate>)
}

8.实际应用示例:

// userSlice.js
import { createSlice } from '@reduxjs/toolkit'const userSlice = createSlice({name: 'user',initialState: {profile: null,token: null},reducers: {setUser: (state, action) => {state.profile = action.payload},setToken: (state, action) => {state.token = action.payload},logout: (state) => {state.profile = nullstate.token = null}}
})// store.js
const persistConfig = {key: 'user',storage,whitelist: ['token'] // 只持久化 token
}const persistedUserReducer = persistReducer(persistConfig,userSlice.reducer
)// 使用
function App() {const dispatch = useDispatch()const token = useSelector(state => state.user.token)useEffect(() => {if (token) {// 自动登录逻辑}}, [token])return (// ...)
}

主要功能:

  • 自动保存状态到存储
  • 应用启动时恢复状态
  • 选择性持久化
  • 版本控制和迁移
  • 自定义存储引擎
  • 数据转换

使用场景:

1. 用户登录状态

  • 应用配置
  • 主题设置
  • 缓存数据
  • 离线功能

注意事项:

  • 不要持久化敏感信息
  • 控制持久化数据大小
  • 处理版本升级
  • 考虑清理策略
  • 处理错误情况

http://www.ppmy.cn/embedded/152146.html

相关文章

密码学原理技术-第十章-Digital Signatures

文章目录 总结The principle of digital signatures核心流程Security of Signature Schemes Security servicesCore Security ServicesAdditional Security Services The RSA digital signature schemeMain idea of the schoolbook RSA signature schemeSecurity and Performan…

AdaBoost算法详解与PyTorch实现

AdaBoost算法详解与PyTorch实现 目录 AdaBoost算法详解与PyTorch实现1. AdaBoost算法概述1.1 集成学习1.2 AdaBoost的优势2. AdaBoost的核心技术2.1 样本权重调整2.2 弱分类器组合2.3 损失函数2.4 正则化技术3. PyTorch实现AdaBoost3.1 环境准备3.2 PyTorch实现AdaBoost4. 案例…

【React】漫游式引导

前言 项目中Antd版本较低&#xff0c;升级到有该组件的新版风险过于大&#xff0c;因为考虑到是老项目&#xff0c;不升级为上策&#xff08;怕出啥幺蛾子&#xff09;&#xff0c;所以抽出为一个内部组件完成需求即可&#x1f60e;~ 实践 Tour const Tour ({visible,step…

单元测试、系统测试和集成测试知识

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试&#xff0c;如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff…

# Kafka组件化及拓展

1.Kafka Kafka是一个开源的分布式事件流处理平台。主要用于构建实时数据管道和流处理应用程序&#xff0c;广泛用于日志采集。Kafka具有高吞吐量、高可用性、持久化存储、可拓展性等特点。因为公司项目中消息中间件都是用的Kafka&#xff0c;而且也发现在使用时有一些亮点和设…

大带宽服务器和普通服务器相比较的优势

服务器作为各个企业线上业务中重要的网络设备&#xff0c;能够在网络中为其他客户机提供计算或者是应用服务&#xff0c;不同的应用场景中也会运用不同的服务器类型&#xff0c;本文就来为大家介绍一下大带宽服务器与普通服务器相比较来说的优势都有哪些&#xff01; 大带宽服务…

【vue】晋升路线图、蛇形进度条

一、效果图&#xff08;参考链接&#xff09; 代码实现 <template><div class"only-content"><h1 class"text-center my-3">讲师晋升路线</h1><!--时间轴线显示--><div class"time-line"><div class&qu…

国产编辑器EverEdit - 使用技巧:变量重命名的一种简单替代方法

1 使用技巧&#xff1a;变量重命名的一种简单替代方法 1.1 应用场景 写过代码的都知道&#xff0c;经常添加功能的时候&#xff0c;是把别的地方的代码拷贝过来&#xff0c;改吧改吧&#xff0c;就能用了&#xff0c;改的过程中&#xff0c;就涉及到一个变量名的问题&#xff…