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

react中useReducer的使用

// 导入React核心库及所需的类型和Hooks // FC: FunctionComponent 函数组件类型,用于约束组件类型 // useReducer: 用于复杂状态管理的Hook,替代useState处理多状态/复杂逻辑 // useState: 基础状态管理Hook(本示例未实际使用,保留导入仅作参考) import React, { FC, useReducer, useState } from 'react' /** * 定义状态的类型接口 * 约束useReducer中state的结构,确保类型安全 */ type StateType = { // 计数数值,核心状态字段 count: number } /** * 定义动作的类型接口 * 约束dispatch派发的action对象结构 */ type ActionType = { // 动作类型标识,用于reducer中区分不同操作 type: string // 若需要传递额外数据,可扩展该接口,例如:payload?: any } /** * 初始化状态值 * 作为useReducer的初始状态,定义count的初始值为100 */ const initialState: StateType = { count: 100 } /** * Reducer函数:纯函数,负责根据action更新状态 * 核心原则:不可变数据,返回新的state对象而非修改原对象 * @param state 当前状态(更新前的状态) * @param action 派发的动作对象,包含type标识 * @returns 新的状态对象(必须与StateType类型匹配) */ function reducer(state: StateType, action: ActionType) { // 根据action.type区分不同的状态更新逻辑 switch (action.type) { // 处理计数增加的动作 case 'increment': // 返回新状态:count在原有基础上加1 return { count: state.count + 1 } // 处理计数减少的动作 case 'decrement': // 返回新状态:count在原有基础上减1 return { count: state.count - 1 } // 处理未知动作类型,抛出错误提示 default: throw new Error(`未匹配到action类型: ${action.type}`) } } /** * 计数组件:使用useReducer管理计数状态 * FC类型约束:确保组件符合React函数组件的规范 */ const CountReducer: FC = () => { // 使用useReducer Hook创建状态和派发动作的方法 // 参数1: reducer函数(处理状态更新逻辑) // 参数2: initialState(初始状态) // 返回值: // state: 当前最新的状态对象(类型为StateType) // dispatch: 派发动作的函数,用于触发状态更新 const [state, dispatch] = useReducer(reducer, initialState) return ( // 片段标签:无需额外DOM节点包裹子元素 <> {/* 展示当前计数数值:从state中读取count */} <span>count:{state.count}</span> {/* 增加按钮:点击时派发increment类型的动作 */} <button onClick={() => dispatch({ type: 'increment' })} > + </button> {/* 减少按钮:点击时派发decrement类型的动作 */} <button onClick={() => dispatch({ type: 'decrement' })} > - </button> </> ) } // 导出组件,供其他模块导入使用 export default CountReducer

关键注释说明:

1. 类型定义:清晰标注StateType和ActionType的作用,约束状态和动作的结构,体现 TypeScript 的类型安全特性。

2. Reducer 函数:重点说明纯函数特性、不可变数据原则,以及每个 case 分支的作用。

3. useReducer 使用:解释 Hook 的参数和返回值,明确state(当前状态)和dispatch(动作派发函数)的含义。

4. UI 交互:标注按钮点击事件中dispatch的作用,说明如何通过派发不同类型的动作触发状态更新。

5. 代码结构:注释片段标签、导出语句等细节,帮助理解 React 组件的基本结构。

http://www.cnnetsun.cn/news/26673.html

相关文章:

  • 玩转SM16714PHT景观装饰驱动IC(1)
  • 云服务器的核心优势
  • 15. PPML - 隐私保护机器学习综述 - 《Towards Efficient Privacy-Preserving Machine Learning: A Systematic Review》
  • Qwen3-14B-AWQ:重新定义轻量化大模型效率标准
  • Linux环境下的C语言编程(三十九)
  • 毕业设计实战:基于SSM+MySQL的图书商城管理系统设计与实现,从需求到测试全流程拆解,新手也能轻松通关!
  • 毕业设计实战:基于Java+MySQL的校园二手书交易平台设计与实现,从需求到上线全流程避坑指南!
  • 毕业设计实战:基于SSM+MySQL的问卷调查系统,避开这些坑轻松搞定毕设!
  • 非正弦反电动势下PMSM与BLDC无感控制算法研究:自适应谐波估计降低转矩脉动
  • 单相并网逆变器Matlab仿真:离网仿真与PLL锁相环研究,电感电流谐波含量THD优化仿真效果
  • Kate 高级文本编辑器 v26.03.70 官方中文版
  • yadm 完整使用指南:从入门到精通掌握点文件管理
  • 基于Web的大学生体测管理系统设计与实现中期(1)
  • 代码随想录算法训练营第四十三天 | 98. 所有可达路径
  • GBase 8a数据库集群硬件部署安装建议
  • GBase数据库护航国家管网SCADA系统四年无中断平稳运行
  • 一文搞定 AI 智能体架构设计的9大核心技术
  • 计算机毕业设计springboot基于JAVA的校园图书馆管理系统的设计与实现 基于Spring Boot框架的校园图书馆信息化管理系统开发与应用研究 利用Spring Boot与Java技术构建的高
  • 数据结构==LRU Cache ==
  • AMD ROCm平台上的YOLOv8目标检测:从入门到精通的5步优化指南
  • 如何让GPT-5.2成为你职场上的得力助手?这5大功能必看!
  • 如何快速掌握YOLOv12:实时目标检测的完整实践指南
  • PINNs-Torch:用PyTorch轻松实现物理信息神经网络
  • JavaScript学习笔记:5.函数
  • Apache Kvrocks数据库部署实战:从零到一的完整搭建教程
  • 16、远程系统管理与安全防护指南
  • 施耐德BMENOC0321C:高性能模块化驱动控制器(增强通信版)
  • 金融人转AI:从入门到上手,我的“证书认证+技能”学习路线分享
  • 模块化多电平变换器MMC(20子模块、21电平,工作条件220kV(AC)/400kV(DC)...
  • 生态共舞!恭喜10家企业荣获“2025龙蜥社区最佳联合解决方案奖”