hook函数——useReducer

目录

  • 1.useReducer定义
  • 2.useReducer用法
  • 3.useState和useReducer区别

1.useReducer定义

const [state, dispatch] = useReducer(reducer, initialArg, init?)

  • reducer:用于更新 state 的纯函数。参数为 state 和 action,返回值是更新后的 state。state 与 action 可以是任意合法值。
  • initialArg:用于初始化 state 的任意值。初始值的计算逻辑取决于接下来的 init 参数。
  • 可选参数 init:用于计算初始值的函数。如果存在,使用 init(initialArg) 的执行结果作为初始值,否则使用 initialArg。

2.useReducer用法

这里我使用ts的语法,根据定义可以知道,我们首先需要声明一个reducer函数,函数中包含两个参数,一个是数据的状态state,也就是初始值,另一个是对数据需要进行的操作,在函数体里面通过switch case语句指出不同的type需要进行的不同操作,这里实现的是一个计数器原理

type Action = { type: 'add' } | { type: 'del' };function reducer(state: number, action: Action) {switch (action.type) {case 'add':return state + 1;case 'del':return state - 1;default:return state;}
}

在组件中初始化useReducer,给按钮分别添加响应事件,通过dispatch分发点击的type,就可以执行reducer函数里对应的操作了

function App() {const [state, dispatch] = useReducer(reducer, 0);const handleAdd = () => {dispatch({ type: 'add' });};const handleDel = () => {dispatch({ type: 'del' });};return (<div className="App"><h1>Count: {state}</h1><button onClick={handleAdd}>Add</button><button onClick={handleDel}>Del</button></div>);
}

在这里插入图片描述
在这里插入图片描述

3.useState和useReducer区别

useState适用于处理简单的状态管理,适用于独立的、无关联的状态。
useReducer适用于处理复杂的状态逻辑,具有多个相关状态需要统一管理的情况。

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

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

相关文章

这波操作看麻了!十亿行数据,从71s到1.7s的优化之路。

节期间关注到了一个关于 Java 方面的比赛&#xff0c;很有意思。由于是开源的&#xff0c;我把项目拉下来试图学&#xff08;白&#xff09;习&#xff08;嫖&#xff09;别人的做题思路&#xff0c;在这期间一度让我产生了一个自我怀疑&#xff1a; 他们写的 Java 和我会的 Ja…

解锁软件管理新篇章,Allegro许可证使用规定全解

在数字化经济的时代&#xff0c;软件已经成为企业运营的关键要素。然而&#xff0c;软件的使用往往伴随着一系列的合规性问题&#xff0c;导致企业面临潜在的风险和成本。Allegro许可证作为业界领先的软件解决方案提供商&#xff0c;为企业提供全面的许可证使用规定&#xff0c…

每日一题——LeetCode1576.替换所有的问号

方法一 3个字母原则 把&#xff1f;替换为和他左右都不相等的字符&#xff0c;那么找3个字符abc&#xff0c;&#xff1f;总能替换为abc中的一个字符&#xff0c;遍历字符串找到所有&#xff1f;&#xff0c;再遍历abc把&#xff1f;替换为abc中的一个字符 var modifyString …

解析 openGauss 的 AutoVacuum 机制及优化策略

前言 在 openGauss 数据库中&#xff0c;AutoVacuum 机制是一个关键的自动化功能&#xff0c;用于管理表的空间和性能。AutoVacuum 通过定期清理过时数据和更新统计信息&#xff0c;帮助数据库管理员维护数据库的性能和稳定性。 为什么需要 AutoVacuum&#xff1f; 了解AutoV…

JAVA内存模型与JVM内存结构

注意区分Java内存模型&#xff08;Java Memory Model&#xff0c;简称JMM&#xff09;与Jvm内存结构&#xff0c;前者与多线程相关&#xff0c;后者与JVM内部存储相关。本文会对两者进行简单介绍。 一、JAVA内存模型(JMM) 1. 概念 说来话长&#xff0c;由于在不同硬件厂商和…

No matching version found for @babel/traverse@^7.24.0.

问题&#xff1a; npm安装 依赖失败&#xff0c;找不到所需依赖。 原因&#xff1a; npm镜像源中没有该依赖。&#xff08;大概率是因为依赖最近刚更新&#xff0c;当前镜像源没有同步&#xff09; 解决&#xff1a; 查看自己的npm镜像&#xff1a;npm config get registry…

机器学习-面经(part2)

3. 验证方式 3.1什么是过拟合?产生过拟合原因? 定义:指模型在训练集上的效果很好,在测试集上的预测效果很差 数据有噪声 训练数据不足,有限的训练数据 训练模型过度导致模型非常复杂3.2 如何避免过拟合问题? 3.3 什么是机器学习的欠拟合?产生原…

D4890可应用在对讲机上,采用 SOP8/MSOP8两种封装形式

D4890 目前客户主要使用在对讲机上&#xff0c;电压范围2.2V &#xff5e; 5.5V之间&#xff0c;输出功率&#xff08;THDN1%&#xff09;1.0W/8Ω 5.0V。采用 SOP8/MSOP8两种封装形式。 2、推荐的应用线路图如下&#xff1a; 3、实际测试输出波形如下&#xff08;VCC4.5V&…

Web Component 转图片

一、HTML 转图片 目前&#xff0c;常见的开源的能够将 HTML 转换为图片有html2canvas、dom-to-image&#xff0c;大部分场景下&#xff0c;这些开源库都能很友好的处理。 HTML 转图片的实现原理&#xff0c;通常分为两种&#xff1a;svg 与 canvas。今天主要讨论下 svg 的场景…

Flutter中使用Dio库封装网络请求服务工具类

在Flutter应用程序中&#xff0c;进行网络请求是非常常见的任务。Dio是一个强大的、易于使用的Dart包&#xff0c;用于处理HTTP请求。本篇博客将介绍如何封装Dio库&#xff0c;以及如何在Flutter应用中进行网络请求并取消请求。 什么是Dio&#xff1f; Dio是一个基于Dart语言…

解决android studio build Output中文乱码

1.效果如下所示&#xff1a; 代码运行报错的时候&#xff0c;Build Output报的错误日志中中文部分出现乱码&#xff0c;导致看不到到底报的什么错。 2.解决办法如下&#xff1a; 点击Android studio开发工具栏的Help-Edit Custom VM Options....&#xff0c;Android studio会…

springboot微服务中集成了mybatis的服务引入了其他集成了mybatis的服务此时调用引入的服务中的某个mapper接口时报没有注入

在启动类上加引入的服务中的mapper路径&#xff0c;在配置文件中将mapperLocations的值改为classpath*:mapper/.xml&#xff1a; MapperScan(basePackages {"com.ruoyi..mapper"}) 和 mapperLocations: classpath*:mapper/*.xml 是 MyBatis 在 Spring Boot 中配置 M…

AutoGPT实现原理

AutoGPT是一种利用GPT-4模型的自动化任务处理系统&#xff0c;其主要特点包括任务分配、多模型协作、互联网访问和文件读写能力以及上下文联动记忆性。其核心思想是通过零样本学习&#xff08;Zero Shot Learning&#xff09;让GPT-4理解人类设定的角色和目标&#xff0c;并通过…

端口号被占用时的解决办法

1、查看端口占用的进程号 netstat -ano |findstr 8080 2、 找到占用端口的程序 tasklist |findstr 2264 3、kill端口 taskkill /pid 2264 /f

文物预防性保护方案整体结构及软件介绍

​文物预防性保护监测与调控系统整体是构架在商业级技术平台上的多层综合性应用,采用分布式部署的模块化设计,以智能监测终端及高精传感器为核心的感知系统。系统通过以下的层次结构协同工作完成全面的监控与调控功能&#xff1a; 1)系统依靠文物监测调控模型作为运行核心&…

基于springboot+vue的校园爱心捐赠互助管理系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 随着经济水平和生活水平的提高在校大学生在校需要处理的物品也在不断增加&#xff0c;同时校园内还存在很多贫困生&#xff0c;可以通过线上平台实现资源的整合和二次利用&#xff0c;通过线上平台求助信…

护眼灯有效果吗怎么样?推荐五款值得入手的护眼台灯

随着护眼台灯被越来越多的人解锁新的护眼攻略&#xff0c;它的产品热度也越来越高&#xff0c;而且光线柔和&#xff0c;是一款非常不错的照明用具。但是也有不少用户反馈买到的护眼台灯效果不好&#xff0c;有时候还会觉得刺眼&#xff0c;有些不合格的台灯使用时间一久还会散…

动态IP代理技术在网络爬虫中的实际使用

目录 一、动态IP代理技术概述 二、动态IP代理技术的优势 三、动态IP代理技术的实际应用 四、注意事项 五、案例分析 六、结论 随着互联网的迅猛发展&#xff0c;网络爬虫成为了获取信息、分析数据的重要工具。然而&#xff0c;在进行大规模爬取时&#xff0c;爬虫常常面临…

gin gorm学习笔记

代码仓库 https://gitee.com/zhupeng911/go-advanced.git https://gitee.com/zhupeng911/go-project.git 1. gin介绍 Gin 是使用纯 Golang 语言实现的 HTTP Web框架&#xff0c;Gin接口设计简洁&#xff0c;提供类似Martini的API&#xff0c;性能极高&#xff0c;现在被广泛使用…

《C语言缺陷和陷阱》-笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 在这一节中&#xff0c;我们将探索对记号的意义的普遍的误解以及记号和组成它们的字…