当前位置: 首页 > news >正文

React+Redux 数据存储持久化

React+Redux 数据存储持久化

1、安装相关依赖

yarn add @reduxjs/toolkit redux redux-persist

2、userSlice:用户状态数据切片封装

import { createSlice, PayloadAction } from '@reduxjs/toolkit'interface IUserInfo {userName: stringavatar?: stringbrief?: string
}// 使用该类型定义初始 state
const initialState = {userInfo: <IUserInfo>{userName: 'zh',brief: '无心'}
}const userSlice = createSlice({name: 'user',initialState,reducers: {// action: {//   payload: { uerName: 'zhw' },//   type: 'user/updateUserName'    name + 方法名// }// 使用: dispatch(updateUserName({ uerName: 'zhw' }))// // 使用 PayloadAction 类型声明 `action.payload` 的内容updateUserInfo: (state, action: PayloadAction<IUserInfo>) => {// Redux Toolkit 允许在 reducers 中编写 "mutating" 逻辑。// 它实际上并没有改变 state,因为使用的是 Immer 库,检测到“草稿 state”的变化并产生一个全新的// 基于这些更改的不可变的 state。state.userInfo = action.payload}}
})
export const { updateUserInfo } = userSlice.actions
export default userSlice.reducer

3、在store的index.ts中

默认已经模块化了reducers,如下图所示

在这里插入图片描述

// configureStore: store配置项
import { configureStore } from '@reduxjs/toolkit'
// combineReducers: 组合reducers目录下的所有reducer模块
import { combineReducers } from 'redux'
// 数据持久化
import { persistStore, persistReducer } from 'redux-persist'
// defaults to localStorage for web
import storageLocation from 'redux-persist/lib/storage' 
// import storageSession from 'redux-persist/lib/storage/session'// 导入自己封装好的reducers
import userReducer from './reducers/userSlice'
// 持久化存储配置对象
const persistConfig = {key: 'root',storage: storageLocation
}
// 持久化处理后的reducers
const persistedReducer = persistReducer(persistConfig,combineReducers({// 数据切片userReducer})
)
// 将初九话插件和store通过middleware关联起来
const store = configureStore({// userReducer 模块名reducer: persistedReducer,middleware: (getDefaultMiddleware) =>getDefaultMiddleware({serializableCheck: false})
})// 可以订阅 store
// store.subscribe(() => console.log(store.getState(), 'userSlice'))// 持久化的store
const persistor = persistStore(store)export { store, persistor }

4、将store和App组件关联起来

import React from 'react'
import ReactDOM from 'react-dom/client'
// UI css
// antd v5 自带的重置样式
import 'antd/dist/reset.css'
// 自定义css
import '@/assets/style/global.scss'// 导入路由模式
import { BrowserRouter } from 'react-router-dom'
// 导入redux仓库
import { Provider } from 'react-redux'
import { store, persistor } from '@/store'
// store持久化
import { PersistGate } from 'redux-persist/integration/react'import App from './App.tsx'ReactDOM.createRoot(document.getElementById('root')!).render(<Provider store={store}><PersistGate loading={null} persistor={persistor}><React.StrictMode><BrowserRouter><App /></BrowserRouter></React.StrictMode></PersistGate></Provider

5、在组件中使用store

import { useSelector, useDispatch } from 'react-redux'
import { updateUserInfo } from '@/store/reducers/userSlice'
const Home = () => {const {userInfo: { userName, brief }} = useSelector((state: RootState) => state.userReducer)const dispatch = useDispatch()const test = () => {dispatch(updateUserInfo({ userName: 'zhw', brief: '那就这样吧' }))}return (<><div>home page</div><p>{userName}</p><p>{brief}</p><button onClick={test}>测试</button></>)
}
export default Home

数据持续化存储github redux-persist

redux官网 redux

http://www.lryc.cn/news/95231.html

相关文章:

  • Redis高可用部署架构
  • 深度学习与神经网络
  • CPU密集型和IO密集型任务的权衡:如何找到最佳平衡点
  • 超越POSIX:一个时代的终结?
  • 秋招算法备战第22天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • 小程序之移花宫-自定义底部标签图标---【浅入深出系列005】
  • 题目1 SQL注入(保姆级教程)
  • PDF转换成word乱码了怎么办?最实用的方法在这里!
  • 字节跳动后端面试,笔试部分
  • [JavaScript游戏开发] 2D二维地图绘制、人物移动、障碍检测
  • 区间预测 | MATLAB实现基于QRF随机森林分位数回归时间序列区间预测模型
  • .NET网络编程——TCP通信
  • 【Python机器学习】实验01 Numpy以及可视化回顾
  • vue3-组件中的变化
  • 认识主被动无人机遥感数据、预处理无人机遥感数据、定量估算农林植被关键性状、期刊论文插图精细制作与Appdesigner应用开发
  • 数学建模的六个步骤
  • 【计算机组成原理】24王道考研笔记——第二章 数据的表示和运算
  • JQ-6 Bootstrap入门到实战;Bootstrap的(优缺点、安装、响应式容器原理、网格系统、响应式工具类、Bootstrap组件);小项目实践
  • 如何用3D格式转换工具HOOPS Exchange读取颜色和材料信息?
  • [Ubuntu 22.04] 安装docker,并设置镜像加速
  • 如何使用GPT作为SQL查询引擎的自然语言
  • Servlet3.0上传文件
  • 【ARM Cache 系列文章 6 番外篇 – MMU, MPU, SMMU, PMU 差异与关系】
  • NetSuite ERP顾问的进阶之路
  • js 新浏览器打开页面
  • jmeter软件测试实验(附源码以及配置)
  • ZooKeeper原理剖析
  • 【算组合数】CF1833 F
  • Attention详解(自用)
  • pptx转pdf工具类