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

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.lryc.cn/news/284270.html

相关文章:

  • Hive添加第三方Jar包方式总结
  • Linux用户与文件的关系和文件掩码(umask)的作用
  • JS -- 正则表达式教程
  • 详细介绍IP 地址、网络号和主机号、ABC三类、ip地址可分配问题、子网掩码、子网划分
  • 滚动菜单+图片ListView
  • 【4k】4k的webrtc播放示例
  • PMIC 基础知识浅析(四)
  • gin+gorm增删改查目录框架
  • python进阶(二)导入import 机制 | 导入import 用法 工作原理全解析
  • 极客时间-《罗剑锋的 C++ 实战笔记》文章笔记 + 个人思考
  • Pytorch 对比TensorFlow 学习:Day 17-18: 循环神经网络(RNN)和LSTM
  • Java基础 - 07 Set之Set,AbstractSet
  • C++17新特性(三)新的标准库组件
  • Spring Boot入门
  • 【LeetCode】数学精选4题
  • 【漏洞复现】Hikvision SPON IP网络对讲广播系统命令执行漏洞(CVE-2023-6895)
  • IDEA在重启springboot项目时没有自动重新build
  • 华为设备NAT的配置
  • 48-DOM节点,innerHTML,innerText,outerHTML,outerText,静态获取,单机click,cssText
  • 多输入多输出 | Matlab实现基于LightGBM多输入多输出预测
  • 【欢迎您的到来】这里是开源库get_local_info作者的付费专栏
  • Java SE入门及基础(23)
  • 蓝桥杯回文日期判断
  • Qt文件和目录相关操作
  • 递归、搜索与回溯算法(专题一:递归)
  • element-ui 打包流程源码解析(下)
  • ChatGPT给出的前端面试考点(Vue.js)
  • ChatGPT 商业提示词攻略书
  • Notepad++运行C语言输出乱码
  • 深入解析 Java 方法引用:Lambda 表达式的进化之路