React学习--- 事件处理

news/2024/7/15 17:41:37 标签: react.js, 学习, javascript

React学习— 事件处理

1.事件绑定

// onClick={function(){}}
// onClick={()=>{}}
// onClick={this.handleClick}

需要注意:

1.事件名必须符合驼峰命名法

2.事件值必须绑定一个函数 即 {handleClick}, 不能是字符串形式 “handleClick”

3.可以是匿名函数

2.事件对象

run=(event)=>{
 alert( event.target ) //获取 dom 节点
}
render(){
 return(
 <div>
 <button aid="123" onClick={this.run}>事件对象</button>
 </div>
 )
} 

3.事件方法传参

在给方法传递新参数时,方法原有的参数会排在新参数之后.

run=(param, event)=>{
 alert( param , event.target ) //获取 dom 节点
}
render(){
 return(
 <div>
 <div aid="123" onClick={ ()=>{ this.run(100) } }>登陆</div>
 </div>
 )
} 

传参:

 onClick={function(){  }}
onClick={()=>{ }}
 onClick={()=>{ this.handleClick(index) }}

4.this指向问题

什么情况下this会出现问题?

有回调函数的场景中this就有可能出错,常规解决办法有箭头函数、bind改变this指向

4.1. constructor 或 render 里面重新 bind

constructor(props){
 super(props);
 this.state = {}
 this.login.bind(this);
}
<div onClick={ this.login() }>登陆</div>

4.2. 箭头函数

onClick={()=>{}}

4.3. 行内定义事件使用 bind 绑定 this

onClick={function(){}.bind(this)}
onClick={this.handleClick.bind(this)}

5.合成事件

react绑定的所有事件都不是原生事件,是对原生事件进行封装,合成事件:做了兼容性处理又做了中间层

​ 如果 DOM 上绑定了过多的事件处理函数,整个页面响应以及内存占用可能都会受到 影响。React 为了避免这类 DOM 事件滥用,同时屏蔽底层不同浏览器之间的事件系统差 异,实现了一个中间层——SyntheticEvent。

​ 当用户在为 onClick 添加函数时,React 并没有将 Click 时间绑定在 DOM 上面。

​ 而是在 document处监听所有支持的事件,当事件发生并冒泡至 document处时,React 将事件内容封装交给中间层 SyntheticEvent(负责所有事件合成)

​ 所以当事件触发的时候,对使用统一的分发函数 dispatchEvent 将指定函数执行。

​ 注意: 不要将原生事件(addEventListener)和 React 合成事件一起混合使用,这两 个机制是不一样的

6.React 支持的事件类型

键盘事件 onKeyDown onKeyPress onKeyUp

焦点事件 onFocus onBlur

表单事件 onChange onInput onSubmit

鼠标事件 onClick onContextMenu onDoubleClick onMouseDown onMouseUp onMouseOver onMouseOut onMouseMove onMouseEnter onMouseLeave onDrag

选择事件 onSelect

触摸事件 onTouchCancel onTouchEnd onTouchMove onTouchStart

UI 事件 onScroll

动画事件 onAnimationStart onAnimationEnd onAnimationIteration

图像事件 onLoad onError

媒体事件 onPause onPlay onCanPlay onLoadStart onProgress

剪贴板事件 onCopy onCut onPaste


http://www.niftyadmin.cn/n/4939.html

相关文章

MongoDB入门与实战-第四章-SpringBoot集成MongoDB

目录参考MongoDB 连接java客户端方式引入驱动依赖测试创建客户端创建集合查询文档查询集合大小条件查询排序投影聚合查询复合聚合插入文档批量插入更新文档删除文档SpringDataMongoDB添加依赖配置文件新建实体映射插入文档修改文档删除参考 SpringBoot 整合 MongoDB 实战解说 …

图书商城小程序毕业设计(后台基于java的Springboot框架)

功能清单 【后台管理员功能】 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 录入资讯&#xff1a;录入资讯标题、内容等信息 管理资讯&#xff1a;查看已录入资讯列表&#xff0c;支持删除和修改 广告设置&#xff1a;上传图片和设置小程序首页轮播图广告地…

图解LeetCode——1704. 判断字符串的两半是否相似(难度:简单)

一、题目 给你一个偶数长度的字符串 s 。将其拆分成长度相同的两半&#xff0c;前一半为 a &#xff0c;后一半为 b 。 两个字符串 相似 的前提是它们都含有相同数目的元音&#xff08;a&#xff0c;e&#xff0c;i&#xff0c;o&#xff0c;u&#xff0c;A&#xff0c;E&…

【11.11】Codeforces 刷题

DP\text{DP}DP &#xff1a; C. Insertion Sort 题意&#xff1a; 给出一个长度为n(2≤n≤5000)n(2\leq n\leq 5000)n(2≤n≤5000)的无序序列&#xff0c;序列为000到n−1n-1n−1的排列&#xff0c;现在需要你用冒泡排序来将序列排成从小到大有序的序列 你可以执行一次交换两…

诙谐有趣的《UVM实战》笔记——第二章 一个简单的UVM验证平台

前言 某天白天在地铁上听鬼故事&#xff0c;结果晚上要睡觉时&#xff0c;故事里的情节都历历在目&#xff0c;给我鸡皮疙瘩起的~ 不过我倒是没有吓得睡不着&#xff0c;而是转念一想&#xff0c;为啥我学知识忘得很快&#xff0c;随便听的鬼故事却记得这么清楚咧&#xff1f;…

Android逆向基础——Dalvik 指令集

Dalvik指令集是学习Android虚拟机中必不可少的知识点&#xff0c;它是被Android虚拟机所识别且直接执行的指令。 Dalvik是基于寄存器指令集&#xff0c;他的几乎所有指令操作都来自对寄存器的操作&#xff0c;而不像x86/ARM因为寄存器个数不够导致运算结果存不下&#xff0c;需…

什么是TCP/IP协议?

一、TCP/IP模型 TCP/IP协议模型&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;&#xff0c;包含了一系列构成互联网基础的网络协议&#xff0c;是Internet的核心协议。 基于TCP/IP的参考模型将协议分成四个层次&#xff0c;它们分别是链路层、网络…

Windows内存管理总结

Windows内存管理总结 Windows的内存管理大致可以分为3部分 对于用户层0x0到0x7fffffff的2g内存的管理真实物理内存的管理如何将线性地址映射到真实的物理地址 1.用户层虚拟内存管理 ​ 在Windows&#xff08;32位&#xff09;内核的数据结构中每一个进程都保留自己4G的虚拟…