当前位置: 首页 > news >正文

React事件和原生事件的执行顺序

在 React 中,事件处理分为两种类型:React 合成事件(Synthetic Event)和原生 DOM 事件(Native DOM Event)。它们的执行顺序略有不同。

React 合成事件

React 合成事件的执行顺序:

  • React 合成事件捕获阶段(Capture Phase):React 合成事件不支持捕获阶段,因此事件直接进入冒泡阶段。

  • React 合成事件冒泡阶段(Bubble Phase):React 合成事件会在组件树中从目标元素的最内层向上冒泡到最外层的顶级组件。

  • React 合成事件处理函数执行:在 React 合成事件的冒泡阶段,事件处理函数会按照组件层级从内到外的顺序执行。

原生 DOM 事件

原生 DOM 事件的执行顺序:

  • 原生 DOM 事件捕获阶段(Capture Phase):原生 DOM 事件会在目标元素的最外层顶级组件上触发捕获阶段的事件处理函数。

  • 原生 DOM 事件冒泡阶段(Bubble Phase):原生 DOM 事件会在组件树中从目标元素的最内层向上冒泡到最外层的顶级组件。

  • 原生 DOM 事件处理函数执行:在原生 DOM 事件的冒泡阶段,事件处理函数会按照组件层级从内到外的顺序执行。

示例

import React from 'react';class MyComponent extends React.Component {handleClick = () => {console.log('React synthetic event');};handleNativeClick = () => {console.log('Native DOM event');};componentDidMount() {// 在 componentDidMount 中添加原生 DOM 事件监听器document.addEventListener('click', this.handleNativeClick);}componentWillUnmount() {// 在 componentWillUnmount 中移除原生 DOM 事件监听器document.removeEventListener('click', this.handleNativeClick);}render() {return (<div onClick={this.handleClick}>Click me!</div>);}
}export default MyComponent;

  在上面的代码中,我们有一个 MyComponent 组件,它包含一个 < div > 元素,并分别绑定了 React 合成事件 onClick 和原生 DOM 事件 addEventListener。

  当我们在 < div > 元素上点击时,首先会触发 React 合成事件 handleClick,并在控制台打印 “React synthetic event”。然后,由于我们在 componentDidMount 生命周期中添加了原生 DOM 事件监听器,接着会触发原生 DOM 事件 handleNativeClick,并在控制台打印 “Native DOM event”。
  React 合成事件会先于原生 DOM 事件触发,但两者都可以在组件中处理,并按照事件冒泡的顺序执行相应的事件处理函数。

http://www.lryc.cn/news/333574.html

相关文章:

  • 为什么在计算查询Q和键K的矩阵乘法时需要转置键矩阵K。示例说明q11,k11代表什么。线性变换矩阵 W_q 用于生成查询,W_k 用于生成键怎么获取的。
  • 剑指Offer题目笔记27(动态规划单序列问题)
  • 撸代码时,有哪些习惯一定要坚持?
  • 【leetcode面试经典150题】17.罗马数字转整数(C++)
  • 前后端开发之——文章分类管理
  • 第12届蓝桥杯省赛 ---- C/C++ C组
  • IVS模型解释
  • 通用开发技能系列:Git
  • 最新怎么订阅OnlyFans上喜欢的博主,详细教程
  • Mysql故障和优化
  • Windows系统C盘空间优化进阶:磁盘清理与Docker日志管理
  • 14届蓝桥杯 C/C++ B组 T7 子串简写 (字符串)
  • Android 系统大致启动流程
  • 【Web】2024红明谷CTF初赛个人wp(2/4)
  • stable-diffusion-webui安装教程
  • 如何魔改 diffusers 中的 pipelines
  • 解放办公室的利器!让证卡打印机轻松应对繁忙工作场景
  • 2012年认证杯SPSSPRO杯数学建模A题(第二阶段)蜘蛛网全过程文档及程序
  • ES学习日记(七)-------Kibana安装和简易使用
  • react 父子组件的渲染机制 | 优化手段
  • elementPlus el-table动态列扩展及二维表格
  • vitepress系列-04-规整sideBar左侧菜单导航
  • golang slice总结
  • MySQL 数据库的优化
  • Redis 的主从复制、哨兵和cluster集群
  • Unity进阶之路(2)UI Toolkit
  • 实现Hello Qt 程序
  • 若依 ruoyi-vue 接口挂载获取Resources静态资源文件权限校验
  • 【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)
  • 「论文阅读」还在手写Prompt,自动Prompt搜索超越人类水平