【React】合成事件语法
React 合成事件是 React 为了处理浏览器之间的事件差异而提供的一种跨浏览器的事件系统。它封装了原生的 DOM 事件,提供了一致的事件处理机制。
合成事件与原生事件的区别:
- 合成事件是 React 自己实现的,封装了原生事件。
- 合成事件依然可以通过
event.nativeEvent访问原生事件。 - 合成事件支持事件池化,事件处理函数执行完后会被回收。
获取原生事件的方法:

1、合成事件绑定一个“普通函数”
打印出this为undefined,该普通函数相当于是挂载在当前实例对象的原型上,即:
Demo.prototype => Demo.prototype.handle = function handle(){ }
React 会通过 onClick={this.handle1} 传递事件处理函数,但它并没有自动绑定 this,导致 this 在方法执行时是 undefined,而不是组件实例
class Demo extends React.Component {handle1() { console.log(this); //undefined}render() {return <div><button onClick={this.handle1}>按钮1</button></div>;}
}
2、给调用的函数绑定this
在调用handle2时,绑定this,即:this.handle2.bind(this, 10, 20),后面是传递的参数。
bind在React事件绑定的中运用
- 绑定的方法是一个普通函数,需要改变函数中的this是实例,此时需要用到bind「一般都是绑定箭头函数」
- 想给函数传递指定的实参,可以基于bind预先处理「
bind会把合成事件对象以最后一个实参传递给函数」
class Demo extends React.Component {handle2(x, y, ev) {// 只要方法经过bind处理了,那么最后一个实参,就是传递的合成事件对象!!console.log(this, x, y, ev); //实例 10 20 合成事件对象}render() {return <div><button onClick={this.handle2.bind(this, 10, 20)}>按钮2</button></div>;}
}
打印的this为组件的实例对象。

打印的ev是传递的合成事件对象。
合成事件对象SyntheticBaseEvent:在React合成事件触发的时候,也可以获取到事件对象,只不过此对象是合成事件对象「React内部经过特殊处理,把各个浏览器的事件对象统一化后,构建的一个事件对象」。合成事件对象中,也包含了浏览器内置事件对象中的一些属性和方法「常用的基本都有」
- clientX/clientY
- pageX/pageY
- target
- type
- preventDefault
- stopPropagation
- nativeEvent:基于这个属性,可以获取浏览器内置『原生』的事件对象

3、设置普通函数为箭头函数
把绑定的函数设置为“箭头函数”,让其使用上下文中的this「也就是组件实例」。
class Demo extends React.Component {handle3 = (ev) => { //实例.handle3=()=>{....}console.log(this); //实例console.log(ev); //SyntheticBaseEvent 合成事件对象「React内部经过特殊处理,把各个浏览器的事件对象统一化后,构建的一个事件对象」};render() {return <div><button onClick={this.handle3}>按钮3</button></div>;}
}
4、设置普通函数为箭头函数并在调用时进行额外参数
因为设置了普通函数为箭头函数,所以进行bind绑定this的时候,对于绑定的谁,其实不重要了,因为设置了普通函数为箭头函数,此时在函数中this就指向了组件实例。
class Demo extends React.Component {handle4 = (x, ev) => {console.log(x, ev); //10 合成事件对象};render() {return <div><button onClick={this.handle4.bind(null, 10)}>按钮4</button></div>;}
}
源码
class Demo extends React.Component {/* 基于React内部的处理,如果我们给合成事件绑定一个“普通函数”,当事件行为触发,绑定的函数执行;方法中的this会是undefined「不好」!! 解决方案:this->实例+ 我们可以基于JS中的bind方法:预先处理函数中的this和实参的+ 推荐:当然也可以把绑定的函数设置为“箭头函数”,让其使用上下文中的this「也就是我们的实例」合成事件对象SyntheticBaseEvent:我们在React合成事件触发的时候,也可以获取到事件对象,只不过此对象是合成事件对象「React内部经过特殊处理,把各个浏览器的事件对象统一化后,构建的一个事件对象」合成事件对象中,也包含了浏览器内置事件对象中的一些属性和方法「常用的基本都有」+ clientX/clientY+ pageX/pageY+ target+ type+ preventDefault+ stopPropagation+ ...+ nativeEvent:基于这个属性,可以获取浏览器内置『原生』的事件对象+ ...*/handle1() { //Demo.prototype => Demo.prototype.handle=function handle(){}console.log(this); //undefined}handle2(x, y, ev) {// 只要方法经过bind处理了,那么最后一个实参,就是传递的合成事件对象!!console.log(this, x, y, ev); //实例 10 20 合成事件对象}handle3 = (ev) => { //实例.handle3=()=>{....}console.log(this); //实例console.log(ev); //SyntheticBaseEvent 合成事件对象「React内部经过特殊处理,把各个浏览器的事件对象统一化后,构建的一个事件对象」};handle4 = (x, ev) => {console.log(x, ev); //10 合成事件对象};render() {/*bind在React事件绑定的中运用+ 绑定的方法是一个普通函数,需要改变函数中的this是实例,此时需要用到bind「一般都是绑定箭头函数」+ 想给函数传递指定的实参,可以基于bind预先处理「bind会把事件对象以最后一个实参传递给函数」 */return <div><button onClick={this.handle1}>按钮1</button><button onClick={this.handle2.bind(this, 10, 20)}>按钮2</button><button onClick={this.handle3}>按钮3</button><button onClick={this.handle4.bind(null, 10)}>按钮4</button></div>;}
}相关文章:
【React】合成事件语法
React 合成事件是 React 为了处理浏览器之间的事件差异而提供的一种跨浏览器的事件系统。它封装了原生的 DOM 事件,提供了一致的事件处理机制。 合成事件与原生事件的区别: 合成事件是 React 自己实现的,封装了原生事件。合成事件依然可以通…...
Redis02 - 持久化
Redis持久化 文章目录 Redis持久化一:持久化简介1:Redis为什么要进行持久化2:Redis持久化的方式 二:RDB持久化介绍1:手动触发RDB2:自动触发RDB3:redis.conf中进行RDB的配置4:RDB优缺…...
初始JavaEE篇 —— Spring Web MVC入门(上)
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 RequestMappingg 注解介绍 Postman的介绍与使用 PostMapping 与 GetMapping 注解 构造并接收请求 接收简单参数 接收对象…...
c++计算机教程
目的 做出-*/%计算机 要求 做出可以计算-*/%的计算机 实现 完整代码 #include<bits/stdc.h> int main() {std::cout<<"加 减- 乘* 除/ 取余% \没有了|(因为可以算三位)"<<"\n"<<"提示:每打完一个符号或打完一个数,\…...
Leetcode—487. 最大连续1的个数 II【中等】Plus
2025每日刷题(210) Leetcode—487. 最大连续1的个数 II 实现代码 class Solution { public:int findMaxConsecutiveOnes(vector<int>& nums) {int zeros 0;int ans 0;for(int l 0, r 0; r < nums.size(); r) {if(nums[r] 0) {zeros;…...
【MySQL】窗口函数详解(概念+练习+实战)
文章目录 前言1. SQL窗口函数 1.1 窗口函数概念1.2 窗口函数语法1.3 常见窗口函数 1.3.1 聚合窗口函数1.3.2 专用窗口函数 1.4 窗口函数性能比较 2. LeetCode 例题 2.1 LeetCode SQL 178:分数排名2.2 LeetCode SQL 184:最高工资2.3 LeetCode SQL 185&am…...
c语言对应汇编写法(以中微单片机举例)
芯片手册资料 1. 赋值语句 C语言: a 5; b a; 汇编: ; 立即数赋值 LDIA 05H ; ACC 5 LD R01,A ; R01 ACC(a5); 寄存器间赋值 LD A,R01 ; ACC R01(读取a的值) LD R02,A ; R02 ACC&…...
前端组件标准化专家Prompt指令的最佳实践
前端组件标准化专家Prompt 提示词可作为项目自定义提示词使用,本次提示词偏向前端开发的使用,如有需要可适当修改关键词和示例 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使用最好的模型,可以…...
开发板目录 /usr/lib/fonts/ 中的字体文件 msyh.ttc 的介绍【微软雅黑(Microsoft YaHei)】
本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸扩展。 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸扩展。 问:运行 ls /usr/lib/fonts/ 发现有一个名叫 msyh.ttc 的字体文件,能介绍…...
18爬虫:关于playwright相关内容的学习
1.如何在python中安装playwright 打开pycharm,进入终端,输入如下的2个命令行代码即可自动完成playwright的安装 pip install playwright ——》在python中安装playwright第三方模块 playwright install ——》安装playwright所需的工具插件和所支持的…...
docker Error response from daemon: Get “https://registry-1.docker.io/v2/ 的问题处理
docker Error response from daemon: Get "https://registry-1.docker.io/v2/ 的问题处理 最近pull 数据 发现 docker 有如下错误 文章目录 docker Error response from daemon: Get "https://registry-1.docker.io/v2/ 的问题处理报错问题检查网络连接解决方案&…...
拉取本地的 Docker 镜像的三种方法
方法 1:通过 docker save 和 docker load 导出和导入镜像 在本地服务器上导出镜像: 使用 docker save 将镜像保存为一个 .tar 文件: docker save -o mysql-5.7.tar mysql:5.7 将镜像文件传输到其他服务器: 你可以通过 scp 或其他…...
【Linux系统】线程:线程的优点 / 缺点 / 超线程技术 / 异常 / 用途
1、线程的优点 创建和删除线程代价较小 创建一个新线程的代价要比创建一个新进程小得多,删除代价也小。这种说法主要基于以下几个方面: (1)资源共享 内存空间:每个进程都有自己独立的内存空间,包括代码段…...
老榕树的Java专题:Redis 从入门到实践
一、引言 在当今的软件开发领域,数据的高效存储和快速访问是至关重要的。Redis(Remote Dictionary Server)作为一个开源的、基于内存的数据结构存储系统,因其高性能、丰富的数据类型和广泛的应用场景,成为了众多开发者…...
123,【7】 buuctf web [极客大挑战 2019]Secret File
进入靶场 太熟悉了,有种回家的感觉 查看源代码,发现一个紫色文件 点下看看 点secret 信息被隐藏了 要么源代码,要么抓包 源代码没有,抓包 自己点击时只能看到1和3处的文件,点击1后直接跳转3,根本不出…...
微服务知识——微服务拆分规范
文章目录 一、微服务拆分规范1、高内聚、低耦合2、服务拆分正交性原则3、服务拆分层级最多三层4、服务粒度适中、演进式拆分5、避免环形依赖、双向依赖6、通用化接口设计,减少定制化设计7、接口设计需要严格保证兼容性8、将串行调用改为并行调用,或者异步…...
docker数据持久化的意义
Docker 数据持久化是指在 Docker 容器中保存的数据不会因为容器的停止、删除或重启而丢失。Docker 容器本身是临时性的,默认情况下,容器内的文件系统是临时的,容器停止或删除后,其中的数据也会随之丢失。为了确保重要数据…...
双目标定与生成深度图
基于C#联合Halcon实现双目标定整体效果 一,标定 1,标定前准备工作 (获取描述文件与获取相机参数) 针对标准标定板可以直接调用官方提供描述文件,也可以自己生成描述文件后用PS文件打印 2,相机标定 &…...
【SQL】count(1)、count() 与 count(列名) 的区别
在 SQL 中,COUNT 函数用于计算查询结果集中的行数。COUNT(1)、COUNT(*) 和 COUNT(列名) 都可以用来统计行数,但它们在实现细节和使用场景上有一些区别。以下是详细的解释: 1. COUNT(1) 定义: COUNT(1) 计算查询结果集中的行数。 实现: 在执…...
使用bucardo实现postgresql数据库双主同步
使用bucardo实现postgresql数据库双主同步 方案优缺点 优点 pg数据库只支持单向数据复制,双机部署一般只能使用主(读写)备(只读)模式。而使用bucardo能实现pg数据库双机的双主模式,支持同时双写…...
在 Navicat 17 中扩展 PostgreSQL 数据类型 | 创建自定义域
定义域 以适当的格式存储数据可以确保数据完整性,防止错误,优化性能,并通过实施验证规则和支持高效数据管理来维护系统间的一致性。基于这些原因,顶级关系数据库(如PostgreSQL)提供了多种数据类型。此外&a…...
【Apache Paimon】-- 15 -- 利用 paimon-flink-action 同步 postgresql 表数据
利用 Paimon Schema Evolution 核心特性同步变更的 postgresql 表结构和数据 1、背景信息 在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式 (1)人工消息通知,然后手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hi…...
获取 ARM Cortex - M 系列处理器中 PRIMASK 寄存器的值
第一种实现(纯汇编形式) __ASM uint32_t __get_PRIMASK(void) {mrs r0, primaskbx lr }代码分析 __ASM 关键字:这通常是特定编译器(如 ARM GCC 等)用于嵌入汇编代码的指示符。它告诉编译器下面的代码是汇编代码。mrs …...
Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 替代】
🎀🎀Shell语法入门篇 系列篇 🎀🎀 LinuxDocer 容器化部署之 Shell 语法入门篇 【准备阶段】LinuxDocer 容器化部署之 Shell 语法入门篇 【Shell变量】LinuxDocer 容器化部署之 Shell 语法入门篇 【Shell数组与函数】LinuxDocer 容…...
如何处理网络连接错误导致的fetch失败?
处理由于网络连接错误导致的 fetch 失败通常涉及捕获网络错误并提供适当的用户反馈。以下是如何在 Vue 3 中实现这一点的步骤和示例。 一、更新 useFetch 函数 在 useFetch 函数中,需要捕获网络错误,并设置相应的错误信息。网络错误通常会抛出一个 TypeError,可以根据这个…...
PHP PDO 教程
PHP PDO 教程 概述 PHP PDO(PHP Data Objects)扩展为PHP提供了数据访问抽象层。PDO可以让你使用相同的接口访问多种数据库系统,这大大简化了数据库操作。本文将详细介绍PHP PDO的基本用法、优势以及在实际开发中的应用。 ##PDO 简介 PDO是…...
离线统信系统的python第三方库批量安装流程
一、关于UOS本机 操作系统:UOS(基于Debian的Linux发行版) CPU:海光x86 二、具体步骤 1、在联网的电脑上用控制台的pip命令批量下载指定版本的第三方库 方法A cd <目标位置的绝对路径> pip download -d . --platform many…...
IDEA+DeepSeek让Java开发起飞
1.获取DeepSeek秘钥 登录DeepSeek官网 : https://www.deepseek.com/ 进入API开放平台,第一次需要注册一个账号 进去之后需要创建一个API KEY,然后把APIkey记录保存下来 接着我们获取DeepSeek的API对话接口地址,点击左边的:接口…...
mysql的原理及经验
1. 存储引擎 存储引擎是MySQL的核心组件之一,它负责数据的存储和检索。MySQL支持多种存储引擎,每种引擎都有其独特的特点和适用场景。 InnoDB:这是MySQL的默认存储引擎,支持事务处理(ACID特性)、行级锁定和…...
苹果公司宣布正式开源 Xcode 引擎 Swift Build145
2025 年 2 月 1 日,苹果公司宣布正式开源 Xcode 引擎 Swift Build145。 Swift 是苹果公司于 2014 年推出的一种开源编程语言,用于开发 iOS、iPadOS、macOS、watchOS 和 tvOS 等平台的应用程序。 发展历程 诞生:2014 年,苹果在全球…...
