新闻详情

新闻详情

首页 / 资讯中心 / 详情

React useReducer 复杂状态

发布时间:2026/10/2 2:32:14来源:尧图网络
React useReducer 复杂状态
React useReducer 复杂状态前置React Context 跨层传值目标会写reducer(state, action)理解何时从useState升级。引言一个开关、一个输入框 →useState最爽。状态字段变多、更新规则互相牵扯时一堆setX/setY容易乱。useReducer把「怎么从旧状态算出新状态」收进纯函数reducer(state, action)组件里只dispatch({ type: ... })。本篇 demo计数器 可调步长 重置四种 action。动手完整代码react2/12-usereducer/democdreact2/12-usereducer/demonpminstallnpmrun dev改步长再点step/-step点「重置」回到count0, step1。1. 定义 state / action / reducertype State { count: number; step: number } type Action | { type: inc } | { type: dec } | { type: setStep; step: number } | { type: reset } function reducer(state: State, action: Action): State { switch (action.type) { case inc: return { ...state, count: state.count state.step } case dec: return { ...state, count: state.count - state.step } case setStep: return { ...state, step: action.step } case reset: return { count: 0, step: 1 } default: return state } }约定纯函数同样输入 → 同样输出不写副作用不可变更新返回新对象别直接改state.count ...action.type描述「发生了什么」不是「把 count 设成几」2. 组件里dispatchconst [state, dispatch] useReducer(reducer, { count: 0, step: 1 }) button onClick{() dispatch({ type: inc })}step/button button onClick{() dispatch({ type: dec })}-step/button button onClick{() dispatch({ type: reset })}重置/button input typenumber value{state.step} onChange{(e) dispatch({ type: setStep, step: Number(e.target.value) || 1 }) } /UI 只发意图怎么改状态全在 reducer。3. 何时从 useState 升级继续 useState考虑 useReducer单个布尔 / 字符串下一状态严重依赖上一状态字段少、更新简单同一状态有多种「动作」想把更新逻辑抽到组件外测useReducer Context 常一起做中等复杂度的客户端状态更大更碎的全局状态看 Zustand15 篇。4. 常见坑做法问题reducer 里fetch/ 改 DOM副作用放错地方副作用进 event / effect直接 mutatestateReact 可能检测不到更新action 设计成「setCount(5)」一堆丢失「意图」能工作但难推理简单开关也上 reducer过度useState更短demo 在练什么手写State/Action/reducer用dispatch驱动多动作更新体会「步长影响加减」这种跨字段规则放在 reducer 里更清晰自己改一改加type: double或把初始 state 换成惰性初始化useReducer(reducer, undefined, init)。下一篇React 嵌套路由与布局
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

RibbonWorkbench 2016:Dynamics 365命令栏定制与部署完全指南 2026/10/2 18:58:53

RibbonWorkbench 2016:Dynamics 365命令栏定制与部署完全指南

简介:面向Dynamics 365和Power Apps开发者的RibbonWorkbench托管管理包,旨在帮助开发者直观定制命令栏(Ribbon)元素,摆脱手写XML的繁琐,提升界面配置与投放效率。压缩包约1.48MB,内含解决方案定…

阅读更多 →
Python虚拟环境与PyCharm配置实战:告别“明明装好却找不到” 2026/10/2 18:58:34

Python虚拟环境与PyCharm配置实战:告别“明明装好却找不到”

先从我前两天帮一个同学查的问题说起。他在自己电脑上跑一个爬虫脚本,报了ModuleNotFoundError: No module named requests,但命令行里pip list明明显示requests已经装好了。类似这种“明明装了却找不到”的鬼故事,我见了太多。归根到底&…

阅读更多 →
冈萨雷斯图像处理实战:从课本公式到工业落地的工程转化指南 2026/10/2 18:58:34

冈萨雷斯图像处理实战:从课本公式到工业落地的工程转化指南

1. 这不是教科书笔记,而是一线工程师用十年图像项目踩出来的“冈萨雷斯实战地图”如果你正对着《数字图像处理》(冈萨雷斯版)第四版那本厚达900页的砖头书发愁——公式密得像电路板、MATLAB代码示例少得可怜、课后题答案藏在某个不公开的教师…

阅读更多 →
YOLO+轻量分割:工业场景实例分割落地实践 2026/10/2 18:58:34

YOLO+轻量分割:工业场景实例分割落地实践

简介:本资源是一套基于YOLO目标检测框架拓展实现图像语义分割与实例分割的完整工程实践包,面向计算机、电子信息工程及数学等专业本科生,适用于课程设计、期末大作业或毕业设计参考。资源包含源码、图片数据集与详细说明文档,聚焦…

阅读更多 →
前端面试中的AI提效:面试官如何考核候选人的工程能力 2026/10/2 18:58:28

前端面试中的AI提效:面试官如何考核候选人的工程能力

1. 简历里写着“AI提效”的人,我首先看什么这半年我们前端团队扩招,前后我面了三十来个候选人,投高级前端岗位的,简历里十有八九会提到“AI提效”。有的写得很克制,附带了场景和结果;有的写得很玄幻&#x…

阅读更多 →
私有化RAG知识库搭建实战:从架构设计到避坑指南 2026/10/2 18:58:28

私有化RAG知识库搭建实战:从架构设计到避坑指南

去年年中我接到一个任务:把公司散落在各个Wiki、语雀、Confluence、甚至本地 Word 和 PDF 里的产品文档、技术方案、运维手册统一管起来,做一个能“问答”的知识库。老板的要求很明确——数据不能出内网、不能用 SaaS 服务、要能跟现有的 OA 审批流和钉钉…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉