React学习笔记七-事件处理

news2024/9/29 7:25:59

此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享。此为第七篇,主要介绍react中的事件处理。

事件处理

(1)通过onXxx属性指定事件处理函数(注意大小写)

        1.react使用的是自定义(合成)事件,而不是使用原生dom事件,为了兼容性

        在原生js中,我们添加一个点击事件,是元素.onclick。但在react中略有不同,使用的是onClick,react中的事件处理函数与元素js都不一样,就是on后那个字母必须大写。onClick是react对onclick的二次封装,是与原生js语法进行区分,也是为了更好的兼容性。

      2.react中的事件是通过事件委托方式处理的(委托给组件最外层的元素),为了高效

        我们还记得JavaScript中的事件委托吧,react的事件处理就是利用了这个事件委托。假如有一对ul标签,ul中有很多的li标签,我们给li添加事件处理的时候,比如说点击事件,我们会给那么多li标签一个一个的加点击事件吗?当然不会,我们直接给外侧的ul添加点击事件,点击li的时候通过事件冒泡,冒泡到ul,触发点击事件,达到我们想要的结果,实现了高效。

先看代码:

render() {
     return (//构建虚拟dom
         <div>
             <input ref={this.myRef} type="text" placeholder="点击按钮提示内容" />
             <button onClick={this.showInfo}>点我提示输入的数据</button>
             <input ref={this.myRef2} onBlur={this.showInfo2} type="text" placeholder="失去焦点提示内容" />
         </div>
     )
}

 实际上react将input上的事件,加给了最外层的div,与ul和li相同。

(2)通过event.target得到发生事件的dom元素对象

        首先在,react的官方文档,介绍Refs时,官网上说:勿过度使用Refs。请看上个学习笔记的案例,我们尝试省略一个ref。在案例中我们写了一个: onBlur是失去焦点事件。

<input ref={this.myRef2} onBlur={this.showInfo2} type="text" placeholder="失去焦点提示内容" />

相应的事件方法:

showInfo2 = () => {
    alert(this.myRef2.current.value)
}

        这此input内我们有ref,有onBlur事件,我们给input以ref标识,在实例内写的showInfo2方法再通过ref标识来实现事件。

        现在我们可以省略ref,直接写事件函数,完成事件。代码如下:

<input onBlur={this.showInfo2} type="text" placeholder="失去焦点提示内容" />

事件方法如下:

showInfo2 = (event) => {
    alert(event.target.value)
}

我们省略了ref,改写了事件方法。事件方法内传入了一个参数event,这个参数是事件方法自动传入的,就是添加了事件的这个标签。所以可以在事件方法里面直接对标签进行操作。event.taget就是这个dom元素对象。所以我们  alert(event.target.value) 就可以直接显示出input框内的值。

可见,我们虽然省略了ref,但仍然可以实现我们相要的效果。所以说,绑定事件的,发生事件的那个元素,可以去省略ref,但仍然完成对这个元素的操作。

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

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

相关文章

01_JVM快速入门

从面试开始&#xff1a; 请谈谈你对JVM 的理解&#xff1f;java8 的虚拟机有什么更新&#xff1f; 什么是OOM &#xff1f;什么是StackOverflowError&#xff1f;有哪些方法分析&#xff1f; JVM 的常用参数调优你知道哪些&#xff1f; 内存快照抓取和MAT分析DUMP文件知道吗…

2023年第十五届电工杯选题浅析

本次电工杯作为2023年上半年度数学建模赛事的收官之战&#xff0c;报名队伍最后截止统计已经达到12000支队伍&#xff0c;同时免费的报名费也让这个收官之战&#xff0c;被很多建模小白当作第一次练手赛。为了帮助大家选题&#xff0c;下面为大家带来AB两题的思路浅析&#xff…

凌恩生物文献分享 | 癌症领域新曙光——肿瘤内微生物

上一期我们给大家介绍了肿瘤胞内菌在癌症转移中发挥的作用。2022年12月&#xff0c;蔡尚老师团队在Cell子刊-Trends in Cell Biology上又发表了一篇总结肿瘤内菌群在癌症转移中最新发现的综述&#xff0c;其中讨论了癌症治疗遇到的新挑战。 研究亮点 1&#xff09;癌症转移是…

Leetcode 1679. K 和数对的最大数目 双指针法

https://leetcode.cn/problems/max-number-of-k-sum-pairs/ 给你一个整数数组 nums 和一个整数 k 。 每一步操作中&#xff0c;你需要从数组中选出和为 k 的两个整数&#xff0c;并将它们移出数组。 返回你可以对数组执行的最大操作数。 示例 1&#xff1a; 输入&#xff1…

【JS】1693- 重学 JavaScript API - Web Storage API

❝ 前期回顾&#xff1a; 1. Page Visibility API 2. Broadcast Channel API 3. Beacon API 4. Resize Observer API 5. Clipboard API 6. Fetch API 7. Performance API ❞ 在 Web 开发中经常需要在客户端保存和获取数据&#xff0c;Web Storage API 提供了一种在浏览器中存储…

【sop】含储能及sop的多时段配网优化模型

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 之前分享了含sop的配电网优化模型&#xff0c;链接含sop的配电网优化,很多同学在咨询如何增加储能约束&#xff0c;并进行多时段的优化&#xff0c;本次拓展该部分功能&#xff0c;在原代码的基础上增加储能模…

Paragon NTFS2023最新mac免费实用工具磁盘工具

mac虽然系统稳定&#xff0c;但在使用过程中也有一些瑕疵&#xff0c;如当mac连接到ntfs格式移动磁盘时&#xff0c;可能会出现移动磁盘无法在mac被正常读写的状况。遇到移动磁盘无法正常读写的状况&#xff0c;我们可以在mac中使用磁盘工具&#xff0c;以使mac获得对ntfs格式移…

Docker实战1-运行前端Vue项目

本次运行了两个项目&#xff0c;一个是开源的镜像&#xff0c;一个是自己的前端项目镜像 1 在docker中运行 keycloak docker run -p 8080:8080 -e KEYCLOAK_ADMINadmin -e KEYCLOAK_ADMIN_PASSWORDadmin quay.io/keycloak/keycloak:21.1.1 start-dev 这个最简单了&#xff0c…

版图设计IC617 virtuoso启动以及smic18mmrf加载库

一. 启动virtuoso 1.1 创建一个目录用于库管理 mkdir pro3 1.2 拷贝.bashrc到工程目录下&#xff0c;.bashrc存在~目录下&#xff0c;是一个隐藏文件&#xff0c;需要用ls -la查看 1.3 执行.bashrc文件 1.4 启动 virtuoso & 1.5 检查库中是否包含系统基本库&#xff0c;如…

【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

文章目录 List, Set, Queue, Map 四者的区别&#xff1f;集合框架底层数据结构总结ArrayList 和 Vector 的区别ArrayList 与 LinkedList 区别补充内容:RandomAccess 接⼝ArrayList 的扩容机制comparable 和 Comparator 的区别比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同…

Java jdbcTemplate 获取数据表结构

表结构如图 代码 AutowiredJdbcTemplate jdbcTemplate;Testpublic void getColumnNames() throws Exception {String sql "select * from tb_test where 12 ";SqlRowSet sqlRowSet jdbcTemplate.queryForRowSet(sql);SqlRowSetMetaData sqlRsmd sqlRowSet.getMeta…

高手速成 | 过滤器、监听器的创建与配置

本节讲解过滤器、监听器的创建以及监听事件配置示例。 01、过滤器的创建与配置 【例1】创建过滤器及配置过滤规则。 (1) 在Eclipse中新建一个Web项目&#xff0c;取名为Chapt_09。在src目录下&#xff0c;新建一个名为com.test.filter的包。选中该包并按CtrlN组合键&#xf…

Linux之软件包管理

软件包管理 RPM RPM 概述 RPM&#xff08;RedHat Package Manager&#xff09;&#xff0c; RedHat软件包管理工具&#xff0c; 类似windows里面的setup.exe&#xff0c;是Linux这系列操作系统里面的打包安装工具&#xff0c; 它虽然是RedHat的标志&#xff0c; 但理念是通用…

Python自动化对每个文件夹及其子文件夹的Excel表加个表头(Excel不同名且有xls文件)...

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 惟将旧物表深情&#xff0c;钿合金钗寄将去。 大家好&#xff0c;我是皮皮。 一、前言 上一篇文章&#xff0c;我们抛出了一个问题&#xff0c;这篇文章…

【iOS锁_@synchronized源码浅析】

文章目录 前言synchronized介绍加锁实例synchronized实现objc_sync_enter 和 objc_sync_exit objc_sync_enterobj存在SyncList的结构SyncList和SyncData的关系id2data函数的实现1. 使用快速缓存2. 获取该线程下的SyncCache3. 全局哈希表查找4. 生成新数据并写入缓存 总结 前言 …

35从零开始学Java之析构方法又是咋回事?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家详细地介绍了构造方法的使用、特点等内容。我们知道&#xff0…

ESP32 :项目的创建及项目架构解析

一、项目的创建 方式一&#xff1a;基于IDF示例创建 在ESP&#xff0d;IDF中有example示例库&#xff0c;以其中的一个示例为模板创建项目。 1、打开示例库 查看 - 命令面板&#xff08;也可以按住CtrlShiftP 或 F&#xff11;&#xff09; 输入 show examples projects 2…

大数据开发之Hive案例篇8-解析XML

文章目录 一. 问题描述二. 解决方案2.1 官方文档2.2 XML格式不规范 一. 问题描述 今天接到一个新需求&#xff0c;hive表里面有个字段存储的是XML类型数据 数据格式: <a><b>bb</b><c>cc</c> </a>二. 解决方案 2.1 官方文档 遇到不懂的…

PyTorch-Forecasting一个新的时间序列预测库

时间序列预测在金融、天气预报、销售预测和需求预测等各个领域发挥着至关重要的作用。PyTorch- forecasting是一个建立在PyTorch之上的开源Python包&#xff0c;专门用于简化和增强时间序列的工作。在本文中我们介绍PyTorch-Forecasting的特性和功能&#xff0c;并进行示例代码…

xhs小红薯【帖子】采集工具python爬虫抓取

一、xhs【帖子/笔记/视频】采集工具链接 &#xff08;请复制链接至浏览器&#xff0c;进行数据采集&#xff09; http://106.53.68.168:9920/xhs-keyword-spider 能爬取到的属性字段如图1 (点击右侧下拉按钮&#xff0c;可任选字段&#xff09; 图1属性字段 二、爬取规则 …