React Store及store持久化的使用

1.安装

npm insatll react-redux
npm install @reduxjs/toolkit
npm install redux-persist

2. 使用React Toolkit创建counterStore并配置持久化

store/modules/counterStore.ts:

import { createSlice } from '@reduxjs/toolkit'// 定义状态类型  
interface Action {  payload:number,type: string
} 
interface State {  count: number
} export const counterStore = createSlice({// 模块名称独一无二name: 'counter',// 初始数据initialState: {count: 1},// 修改数据的同步方法reducers: {increment: (state:State) => {state.count += 1},decrement: (state:State) => {state.count -= 1},incrementNum: (state:State, action: Action) => {state.count += action.payload}}
})// 导出
export const { increment, decrement, incrementNum } = counterStore.actions
export default counterStore.reducer

store/index.ts:

import { configureStore, combineReducers } from '@reduxjs/toolkit'
import counterReducer from './modules/counterStore'import { persistStore, persistReducer } from 'redux-persist'
// 选择持久化存储引擎,如 localStorage 或 AsyncStorage
import storage from 'redux-persist/lib/storage' // 默认使用localStorage作为存储引擎// 组合各个模块的reducer
const reducer = combineReducers({counter: counterReducer
})// 配置持久化设置
const persistConfig = {key: 'root', // 存储的键名storage // 持久化存储引擎// 可选的配置项,如白名单、黑名单等 选其一就好了// blacklist:['test'], // 只有 test 不会被缓存// whitelist: ["test"], // 只有 test 会被缓存
}const persistedReducer = persistReducer(persistConfig, reducer)export const store = configureStore({reducer: persistedReducer, // 注册子模块middleware: (getDefaultMiddleware) =>getDefaultMiddleware({serializableCheck: false // 关闭默认的序列化检查//关闭严格模式})
})export const persistor = persistStore(store)

 

 3. 为React注入store

react-redux负责把Redux和React 链接 起来,内置 Provider组件,通过 store 参数把创建好的store实例注入到应用中,链接正式建立

main.tsx:

import ReactDOM from 'react-dom/client'
import App from './App'
import { BrowserRouter } from "react-router-dom"
import { Provider } from 'react-redux'
import {store, persistor } from "@/store"
// store持久化
import { PersistGate } from 'redux-persist/integration/react'ReactDOM.createRoot(document.getElementById('root')!).render(<Provider store={store}>{/* 注入router实例 */}<BrowserRouter><PersistGate loading={null} persistor={persistor}><App /></PersistGate></BrowserRouter></Provider>
)

4. React组件使用store中的数据

useSelector,作用:在函数组件中获取redux数据存储对象中的某个数据

useDispatch,作用: 在函数组件中获取dipatch方法(用于发送action给reducer函数)

import React from "react";
import { useDispatch,useSelector } from "react-redux";
import { increment, decrement, incrementNum } from '@/store/modules/counterStore'const App: React.FC = () => {const dispatch = useDispatch()const { count } = useSelector((state:any) => state.counter)return (<div><div>{count}</div><button onClick={() => {dispatch(increment())}}>加1</button><button onClick={() => {dispatch(decrement())}}>减1</button><button onClick={() => {dispatch(incrementNum(5))}}>加5</button></div>);
};export default App;

这样刷新之后数据就不会初始化了 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/629234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程笔记 html5cssjs 042 CSS颜色

编程笔记 html5&css&js 042 CSS颜色 一、CSS 颜色名二、CSS 背景色三、CSS 文本颜色四、CSS 边框颜色五、用颜色值指定颜色六、练习小结 在《编程笔记 html5&css&js 018 HTML颜色》中已经述及颜色。但颜色应当由CSS处理&#xff0c;再次列出。 指定颜色是通过使…

linux-部署Samba文件共享服务

linux-部署Samba文件共享服务 1、使用命令安装samba服务和samba客户端 dnf install samba samba-client # 或者 yum install samba samba-client2、配置文件的设置(可提前备份smb.conf) vim /etc/samba/smb.conf [global]workgroup SAMBAsecurity userpassdb backend tdbsam…

在EasyBoss ERP上查Shopee产品表现,数据更全、处理更高效!

在运营Shopee本土店的过程中&#xff0c;卖家需要及时了解产品数据来进行产品的调整和优化。不过&#xff0c;调整和优化需要基于数据&#xff0c;而非仅凭直觉。 但是&#xff0c;如何全面地查看产品表现数据、快速处理表现不佳的产品&#xff0c;成为诸多卖家头痛的问题&…

python中常见的异常和解决办法

在Python中&#xff0c;常见的异常及其解决办法如下&#xff1a; 语法错误(SyntaxError)&#xff1a;程序在解析阶段发现了语法错误&#xff0c;通常是由于缺少括号、引号或其他语法错误引起的。解决办法是仔细检查代码&#xff0c;确保语法正确。 解析错误(ParseError)&#…

CMake入门教程【高级篇】创建自定义目标add_custom_target

1.概述信息 add_custom_target命令在CMake中用于创建一个不生成任何输出文件的自定义目标。这个命令非常有用,尤其是当你需要执行非构建任务时,比如清理操作、生成文档或运行一些自定义的脚本。 #mermaid-svg-iI1z5xwwKtzTM0ub {font-family:"trebuchet ms",verda…

java的运行机制以及整体流程

背景&#xff1a;学习了这么多年的Java&#xff0c;把自己的理解写成JVM系列&#xff0c;以便于后面的温习&#xff0c;以及帮助更多的java开发人员。 开篇先梳理下&#xff0c;我们之前写的第一个Hello World&#xff01;&#xff0c;当我们运行出来后&#xff0c;在控制台打印…

史上最全的数据科学与艺术

1.背景介绍 数据分析是一种将数据转化为价值的艺术和科学。它涉及到大量的数学、统计、编程、数据库、机器学习等多个领域的知识。数据分析的目的是从数据中提取有用的信息&#xff0c;以便做出明智的决策。 数据分析的艺术体现在数据分析师需要具备丰富的经验和洞察力&#…

『C++成长记』内存管理

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、C/C内存分布 二、内存管理方式 &#x1f4d2;2.1C语言内存管理方式 &#x…

【OpenAI】自定义GPTs应用(GPT助手应用)及外部API接口请求

11月10日&#xff0c;OpenAI正式宣布向所有ChatGPT Plus用户开放GPTs功能 简而言之&#xff1a;GPT应用市场(简称GPTs, 全称GPT Store) Ps&#xff1a; 上图为首次进入时的页面&#xff0c;第一部分是自己创建的GPTs应用&#xff0c;下面是公开可以使用的GPTs应用 一、创建GPTs…

振弦采集仪在桥梁结构健康监测中的应用探索

振弦采集仪在桥梁结构健康监测中的应用探索 振弦采集仪是一种用于测量结构振动特性的仪器&#xff0c;通过采集结构上的振弦信号&#xff0c;可以评估结构的健康状况。在桥梁结构健康监测中&#xff0c;振弦采集仪可以发挥重要的作用。 首先&#xff0c;振弦采集仪能够实时监测…

上传文件:413 Request Entity Too Large Maximum upload size exceeded 解决方案

文章目录 前言一、原因分析二、解决方案1.nginx配置文件2.application.yml配置文件 总结 前言 在上传文件时&#xff0c;如果没有做一些配置的话&#xff0c;会导致上传失败&#xff1a;413 Request Entity Too Large 或者 Maximum upload size exceeded。 提示&#xff1a;以…

geemap学习笔记049:下载Landsat数据时遇到的一个问题

前言 最近在下载Landsat 8 地面反射率数据&#xff08;Surface Reflectance&#xff09;时&#xff0c;遇到了一个问题&#xff0c;无论是使用geemap.ee_export_image_to_drive() 函数还是geemap.download_ee_image() 函数下载的数据&#xff0c;易康都打不开&#xff0c;显示…

linux下,PC机串口通信开发

1、查看电脑的串口 ~/share/bin/PC$ dmesg | grep tty [ 0.083244] printk: console [tty0] enabled [ 0.329145] 00:02: ttyS0 at I/O 0x3f8 (irq 4, base_baud 115200) is a 16550A [ 0.351177] 00:03: ttyS1 at I/O 0x2f8 (irq 3, base_baud 115200) is a 165…

【Java】面向对象 OOP

文章目录 面向对象OOP概述一、对象内存相关二、类的成员之一&#xff1a;成员变量&#xff08;Field&#xff09;2.1 如何声明成员变量2.2 成员变量 与 局部变量 三、类的成员之一&#xff1a;成员方法&#xff08;Method&#xff09;3.1 方法调用内存分析3.2 方法的重载3.3 可…

vue 导出el-table表格数据

1.先安装 file-saver 、xlsx 组件 npm install file-saver -Snpm intsall xlsx -S 2.html 代码 <el-table :data"elTable" ref"" id"table-content"><el-table-column label"其他" align"center"></el-…

NAS入门(学习笔记)

文章目录 AutoMLNAS初期NAS当前NAS框架One-Shot NAS权重共享策略 Zero-Shot NASZen-NASNASWOTEPENAS 参考资料 AutoML 深度学习使特征学习自动化 AutoML 使深度学习自动化 自动化机器学习 (automated machine learning) 是一种自动化的数据驱动方法, 并做出一系列决策。 按…

第2、3次作业

题目1&#xff1a; 基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! 题目2&#xff1a; 给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[www.openlab.com/student](http://www.openlab.c…

泛微OA获取明细表单附件

明细表一个附件对应一个唯一标识,主要是需要sql查询出对应的imagefileid,代码如下: package weaver.interfaces.workflow.action;import weaver.conn.RecordSet; import weaver.file.ImageFileManager; import weaver.general.BaseBean; import weaver.soa.workflow.reques…

PyTorch 还提供的几种连接张量的方法

1. torch.stack() 方法&#xff1a; 行为&#xff1a; 创建一个新的维度&#xff0c;并在该维度上堆叠张量。结果张量的维度比原始张量多一维。适用场景&#xff1a; 当需要在新的维度上堆叠张量时&#xff0c;特别是在创建新批次或样本时。 import torchtensor1 torch.tens…

RIP【新华三与华为区别】

【介绍】 rip分为rip 1 与 rip 2 &#xff0c;rip 2 是对 rip 1 的一种升级&#xff0c;rip 2 可以进行认证等功能 【命令】 新华三&#xff1a; [HC3-R1] rip #启用rip [HC3-R1-rip] version 2 #告知rip 版本号 [HC3-R1-rip] network 192.168.1.0 #宣告其网段 [HC3-R1-rip] …