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

【React】react-redux+redux-toolkit实现状态管理

安装

npm install @reduxjs/toolkit react-redux
  1. Redux Toolkit 是官方推荐编写Redux的逻辑方式,用于简化书写方式
  2. React-redux 用来链接Redux和React组件之间的中间件

使用

定义数据

创建要管理的数据模块 store/module/counter.ts

import { createSlice, PayloadAction } from '@reduxjs/toolkit'const counterSlice = createSlice({name: 'counter',initialState: {counter: 0, // 初始值},reducers: {// 修改值的方法changeCounter: (state, { payload }: PayloadAction<number>) => {state.counter = payload // 使传入的参数赋值到counter},}
})export const { changeCounter } = counterSlice.actions // 导出修改的方法
export default counterSlice.reducer

创建store/index.ts用于管理和导出项目所含的状态数据

import { configureStore } from '@reduxjs/toolkit'
import { useSelector, useDispatch } from 'react-redux'
import type { TypedUseSelectorHook } from 'react-redux'
import counterReducer from './module/counter' // 管理的模块const store = configureStore({reducer:{counter: counterReducer // 定义管理的模块}
})type RootState = ReturnType<typeof store.getState>
type AppDispatch = typeof store.dispatch
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector // 导出使用数据的方法
export const useAppDispatch: () => AppDispatch = useDispatch // 导出修改数据的方法
export default store

为React注入store

在项目主入口main.tsx中, 使用Provider标签包裹来注入store

import { Provider } from "react-redux";
import store from "@/store/index.ts";createRoot(document.getElementById("root") as HTMLElement).render(<Provider store={store}><App /></Provider>
);

页面中使用/修改数据

import { useAppSelector, useAppDispatch } from "@/store";
import { changeCounter } from "@/store/module/counter";const { count, text } = useAppSelector((state) => ({count: state.counter.counter, // 取值
}));// 修改方法
const dispatch = useAppDispatch();
function handlecChangeCount() {dispatch(changeCounter(count + 1));
}return (<><div>{count}</div><button onClick={handlecChangeCount}>change</button></>);
http://www.lryc.cn/news/536553.html

相关文章:

  • 如何通过AI轻松制作PPT?让PPT一键生成变得简单又高效
  • Springer |第七届2025年区块链、人工智能和可信系统国际会议
  • 新一代SCADA: 宏集Panorama Suite 2025 正式发布,提供更灵活、符合人体工学且安全的应用体验
  • AI在电竞比分网中的主要应用场景
  • 前端快速生成接口方法
  • 【Pico】使用Pico进行无线串流搜索不到电脑
  • 机柜机箱制冷风扇在使用过程中突然停止运转的原因
  • Python函数返回值250214
  • call、apply、bind 详解
  • 详解电子邮箱工作原理|SMTP、POP3、IMAP、SPF、MIME
  • QT笔记——QPlainTextEdit
  • Qt使用pri和pro文件进行模块化编程
  • Linux-文件基本操作
  • 自己部署 DeepSeek 助力 Vue 开发:打造丝滑的时间线(Timeline )
  • 初窥强大,AI识别技术实现图像转文字(OCR技术)
  • 【Apache Paimon】-- 作为一名小白,如何系统地学习 Apache paimon?
  • Elasticvue使用总结
  • 尚硅谷爬虫note002
  • 小白零基础如何搭建CNN
  • 在vivado中对数据进行延时,时序对齐问题上的理清
  • 《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决?
  • vue学习笔记7
  • Unity 增量打包AssetBundle
  • 嵌入式八股文面试题(二)C语言算法
  • 尚硅谷爬虫note005
  • xml 和json互转工具
  • ElementUI 抽屉组件高度封装
  • 深入解析:如何在C#和C/C++之间安全高效地通过P/Invoke传递多维数组
  • 轻量级在线ETL数据集成工具架构设计与技术实现深度剖析
  • 二、k8s项目的生命周期