我的编程空间,编程开发者的网络收藏夹
学习永远不晚

react的合成事件如何形容

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

react的合成事件如何形容

react的合成事件如何形容

本教程操作环境:Windows7系统、react18版、Dell G3电脑。

一、合成事件是什么

React基于浏览器的事件机制自身实现了一套事件机制,包括事件注册、事件的合成、事件冒泡、事件派发等

在React中这套事件机制被称之为合成事件

合成事件(SyntheticEvent)

React 合成事件(SyntheticEvent)是 React 模拟原生 DOM 事件所有能力的一个事件对象,即浏览器原生事件的跨浏览器包装器。它根据 W3C 规范 来定义合成事件,兼容所有浏览器,拥有与浏览器原生事件相同的接口。例如

const button = <button onClick={handleClick}>按钮</button>

在 React 中,所有事件都是合成的,不是原生 DOM 事件,但可以通过 e.nativeEvent 属性获取 DOM 事件。 比如:

const handleClick = (e) => console.log(e.nativeEvent);;
const button = <button onClick={handleClick}>按钮</button>

从上面可以看到React事件和原生事件也非常的相似,但也有一定的区别:

  • 事件名称命名方式不同

// 原生事件绑定方式
<button onclick="handleClick()">按钮命名</button>
      
// React 合成事件绑定方式
const button = <button onClick={handleClick}>按钮命名</button>
  • 事件处理函数书写不同

// 原生事件 事件处理函数写法
<button onclick="handleClick()">按钮命名</button>
      
// React 合成事件 事件处理函数写法
const button = <button onClick={handleClick}>按钮命名</button>

虽然onclick看似绑定到DOM元素上,但实际并不会把事件代理函数直接绑定到真实的节点上,而是把所有的事件绑定到结构的最外层,使用一个统一的事件去监听。【相关推荐:Redis视频教程、编程教学】

这个事件监听器上维持了一个映射来保存所有组件内部的事件监听和处理函数。当组件挂载或卸载时,只是在这个统一的事件监听器上插入或删除一些对象。

当事件发生时,首先被这个统一的事件监听器处理,然后在映射里找到真正的事件处理函数并调用。这样做简化了事件处理和回收机制,效率也有很大提升。

二、执行顺序

关于React合成事件与原生事件执行顺序,可以看看下面一个例子:

import  React  from 'react';
class App extends React.Component{

  constructor(props) {
    super(props);
    this.parentRef = React.createRef();
    this.childRef = React.createRef();
  }
  componentDidMount() {
    console.log("React componentDidMount!");
    this.parentRef.current?.addEventListener("click", () => {
      console.log("原生事件:父元素 DOM 事件监听!");
    });
    this.childRef.current?.addEventListener("click", () => {
      console.log("原生事件:子元素 DOM 事件监听!");
    });
    document.addEventListener("click", (e) => {
      console.log("原生事件:document DOM 事件监听!");
    });
  }
  parentClickFun = () => {
    console.log("React 事件:父元素事件监听!");
  };
  childClickFun = () => {
    console.log("React 事件:子元素事件监听!");
  };
  render() {
    return (
      <div ref={this.parentRef} onClick={this.parentClickFun}>
        <div ref={this.childRef} onClick={this.childClickFun}>
          分析事件执行顺序
        </div>
      </div>
    );
  }
}
export default App;

输出顺序为:

原生事件:子元素 DOM 事件监听! 
原生事件:父元素 DOM 事件监听! 
React 事件:子元素事件监听! 
React 事件:父元素事件监听! 
原生事件:document DOM 事件监听!

可以得出以下结论:

  • React 所有事件都挂载在 document 对象上

  • 当真实 DOM 元素触发事件,会冒泡到 document 对象后,再处理 React 事件

  • 所以会先执行原生事件,然后处理 React 事件

  • 最后真正执行 document 上挂载的事件

对应过程如图所示:

1.jpg

所以想要阻止不同时间段的冒泡行为,对应使用不同的方法,对应如下:

  • 阻止合成事件间的冒泡,用e.stopPropagation()

  • 阻止合成事件与最外层 document 上的事件间的冒泡,用e.nativeEvent.stopImmediatePropagation()

  • 阻止合成事件与除最外层document上的原生事件上的冒泡,通过判断e.target来避免

document.body.addEventListener('click', e => {   
    if (e.target && e.target.matches('div.code')) {  
        return;    
    }    
    this.setState({   active: false,    });   }); 
}

三、总结

React事件机制总结如下:

  • React 上注册的事件最终会绑定在document这个 DOM 上,而不是 React 组件对应的 DOM(减少内存开销就是因为所有的事件都绑定在 document 上,其他节点没有绑定事件)

  • React 自身实现了一套事件冒泡机制,所以这也就是为什么我们 event.stopPropagation()无效的原因。

  • React 通过队列的形式,从触发的组件向父组件回溯,然后调用他们 JSX 中定义的 callback

  • React 有一套自己的合成事件 SyntheticEvent

(学习视频分享:编程基础视频)

以上就是react的合成事件如何形容的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

react的合成事件如何形容

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

react的合成事件如何形容

React合成事件是React模拟原生DOM事件所有能力的一个事件对象,即浏览器原生事件的跨浏览器包装器;它根据W3C规范来定义合成事件,兼容所有浏览器,拥有与浏览器原生事件相同的接口。在React中,所有事件都是合成的,不是原生DOM事件,但可以通过“e.nativeEvent”属性获取DOM事件。
2023-05-14

React如何实现合成事件

本篇内容介绍了“React如何实现合成事件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事件绑定首先是 React 项目过程启动时,调用 l
2023-07-04

react的合成事件是什么

本篇内容介绍了“react的合成事件是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!React合成事件是React模拟原生DOM事件所有
2023-07-04

React中的合成事件怎么实现

这篇文章主要介绍了React中的合成事件怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React中的合成事件怎么实现文章都会有所收获,下面我们一起来看看吧。1 事件三个阶段 捕获、目标、处理 (具体百度
2023-07-05

React合成事件的原理是什么

这篇文章主要讲解了“React合成事件的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React合成事件的原理是什么”吧!事件介绍什么是事件?事件是在编程时系统内发生的动作或者发生
2023-07-02

css3如何利用transform变形结合事件完成扇形导航

这篇文章给大家分享的是有关css3如何利用transform变形结合事件完成扇形导航的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这个案例因为写错了一个transition的单词,害得我花了一个下午的时间,真的眼
2023-06-08

React实现合成事件的源码分析

React 中的事件,是对原生事件的封装,叫做合成事件。抽象出一层合成事件,是为了做兼容,抹平不同浏览器之间的差异。本文将从事件绑定和事件触发角度,带大家解读下源码,感兴趣的可以了解一下
2022-12-08

react中合成事件与原生事件的示例分析

小编给大家分享一下react中合成事件与原生事件的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 原生事件原生事件就是js的原生事件,如通过docum
2023-06-15

React中合成事件的原理是什么

本篇内容介绍了“React中合成事件的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事件介绍什么是事件事件是在编程时系统内发生的动
2023-07-05

React中的合成事件是什么原理

React中的事件,是对原生事件的封装,叫做合成事件。这篇文章主要通过几个简单的示例为大家详细介绍一下React中的合成事件,感兴趣的可以了解一下
2023-02-23

深入分析React源码中的合成事件

合成事件不是浏览器本身触发的事件,自己创建和触发的事件。本文将从源码角度带大家一起深入了解下React中的合成事件,需要的可以参考一下
2022-11-13

jQuery如何监听语音合成结束事件?

jQuery提供ended事件监听语音合成结束事件。步骤:创建SpeechSynthesisUtterance对象,包含要合成的文本。为utterance对象添加ended事件侦听器。将utterance对象添加到SpeechSynthesis对象。在事件侦听器中处理事件,例如停止合成或执行其他操作。注意:ended事件只在成功完成的情况下触发,并且可以多次触发。不同浏览器对SpeechSynthesisAPI的支持不同。
jQuery如何监听语音合成结束事件?
2024-04-02

jQuery如何监听语音合成开始事件?

jQuery监听语音合成开始事件背景jQuery提供了一个方便的方法来处理网页开发任务,包括语音合成集成。监听语音合成开始事件使用jQuery的on方法选择器指定要监听的元素事件处理程序在语音合成开始时执行示例$(function(){$("#myTTS").on("start",function(){//在语音合成开始时执行此代码});});注意事项确保使用的语音合成库支持start事件。事件处理程序应执行轻量级任务。可以使用off方法取消监听事件。
jQuery如何监听语音合成开始事件?
2024-04-02

jQuery如何监听语音合成进度事件?

jQuery监听语音合成进度事件简介:本文介绍如何使用jQuery的voicesynthesis插件监听语音合成进度事件,以便实时跟踪音频合成进度。监听步骤:初始化插件绑定voicesynthesisprogress事件处理程序事件对象属性:elapsedTime:已合成的音频时长remainingTime:剩余合成时长text:正在合成的文本utterance:正在合成的SpeechSynthesisUtterance对象进度事件处理程序示例:更新进度条的宽度,以反映合成的进度百分比停止监听:使用off
jQuery如何监听语音合成进度事件?
2024-04-02

Linux如何将多个文件内容合成一个

这篇文章主要讲解了“Linux如何将多个文件内容合成一个”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux如何将多个文件内容合成一个”吧!  Linux 或 类Unix 下实现合并多个
2023-06-13

微信小程序如何配置文件的形式和内容

这篇文章主要介绍了微信小程序如何配置文件的形式和内容的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序如何配置文件的形式和内容文章都会有所收获,下面我们一起来看看吧。形式从配置文件的扩展名json可以知道
2023-06-19

linux如何合并两个文件或两栏的内容

本指南详细介绍了在Linux中合并文件或栏内容的方法,包括使用命令行工具、管道或重定向。讲解的方法有:cat命令:将多个文件合并到一个文件中paste命令:将两个或多个文件的对应栏合并管道和重定向:组合使用管道和重定向实现灵活合并xargs命令:处理输入列表并执行命令合并特定行:使用grep命令合并特定栏:使用cut命令通过理解这些技术,用户可以根据需求高效处理数据并创建新的文件。
linux如何合并两个文件或两栏的内容
2024-04-02

编程热搜

目录