React学习笔记七-事件处理

news/2025/1/12 3:56:58/

此文章是本人在学习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.ppmy.cn/news/87365.html

相关文章

数字图像处理 基于傅里叶变换的图像拼接

一、简述 这里讨论的算法主要是指应用于基于相机拍摄的显微镜的2D图像的拼接。基于2D显微图像的拼接通常只考虑x、y方向的位移。 图像拼接在图像处理中应用广泛。特别是对高分辨率标本成像的需求日益增加。通常,这些标本不适合显微镜的视野。为了克服这一缺点,使用移动样品的…

QT入门看这一篇就够了——超详细讲解(40000多字详细讲解,涵盖qt大量知识)

目录 一、Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt的优势 1.4 Qt版本 1.5 成功案例 二、创建Qt项目 2.1 使用向导创建 2.2 一个最简单的Qt应用程序 2.2.1 main函数中 2.2.2 类头文件 2.3 .pro文件 2.4 命名规范 2.5 QtCreator常用快捷键 三、Qt按钮小程序 …

sql查询指定数据的函数(等于、and、or、in、find_in_set、like)

sql查询指定数据的函数&#xff08;等于、and、or、in、find_in_set、like&#xff09;&#xff1a; 1.查询指定单字段的指定数据&#xff1a; 举例&#xff1a;查询user表中address字段数据等于aa的数据&#xff1b; select * from user where address aa 2.查询指定多字段…

C语言基础知识:include用法

目录 #include 命令介绍 插入头文件的内容 预处理器如何找到头文件 嵌套的 #include 命令 #include 命令介绍 #include 命令是预处理命令的一种&#xff0c;预处理命令可以将别的源代码内容插入到所指定的位置&#xff1b;可以标识出只有在特定条件下才会被编译的某一段程序…

【PHP图片托管】免费CFimagehost图床源码搭建私人图床 - 无需数据库

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

2. MySQL字段类型【MySQL系列】

1.字段类型 1.1 整型 字段字节无符号取值范围有符号取值范围TINYINT10-255-128 - 127SMALLINT20 - 65535-2^15 (-32,768) 到 2^15 - 1 (32,767)MEDIUMINT30 - 16777215-8388608到8388607INT40 - 4294967295-2^31 (-2,147,483,648) - 2^31 - 1 (2,147,483,647)BIGINT80 - 1844…

【数据结构】C--顺序表1.0版本(本文非常适合小白观看,已尽力详解,以及图解也是尽量列举)

目录 0.前言 什么是数据结构&#xff1f; 1.逻辑结构: 1.1线性结构: 1.2非线性结构: (1)集合 (2)树形结构 (3)图形结构或者网状结构 2.存储结构 一.线性表 二.顺序表 顺序表与数组的关系:(非常容易混淆) 1.静态顺序表&#xff1a;使用定长数组存储元素 2.动态顺序表…

pyinstaller 打包 ! pyinstaller 打包路径问题!wordcloud打包缺失stopwords文件

wordcloud打包缺失stopwords文件 错误描述 Unhandled exception in script Failed to execute scriptmain due to unhandled exception: (Errno 2] No such file or directory: C:\Users\VADMINI\appDatallLocal\Templ\2\ME186322\wordcloud\stopwords解决办法 找到安装word…