IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React事件 -> 正文阅读

[JavaScript知识库]React事件

(提示:一个没有添加过点击事件的真实DOM元素,被点击了也会有事件冒泡)
React事件都注册在document中,DOM被点击了就会冒泡到document中,然后document会结合虚拟dom树,找到那个事件进行调用,在document中使用事件委托的方式进行

这里的事件是 React内置组件的事件(就像是原生div的那些onclick,input的onchange、onblur)
(如果给每一个元素都注册事件,那就会注册很多很多个事件,所以他用如下的做法)

React事件

  1. 给document注册事件(因为事件都会冒泡到document所以直接监听document)
  2. 几乎所有的元素的事件处理,均在document的事件中处理
    a. 对于一些不会冒泡的事件还是在React元素上监听的(对于这种元素的话阻止真实dom的冒泡事件的话就是没有用的)
    b. 一些document没有的事件,直接在React元素上监听(例如video的onPlay事件)
  3. 在document的事件处理,React会根据虚拟dom树的结构完成事件函数的调用
  4. React的事件参数,并非一个真实DOM事件参数,他是React合成的对象,该对象类似于真实DOM的事件参数
    1 . e.stopPropagation,阻止事件在虚拟DOM中的冒泡
    2 . e.nativeEvent,可以得到真实的DOM事件对象
    3 . 为了提高执行效率,React使用事件对象池来处理事件对象(当对象池未满时,React 创建新的事件对象,派发给组件。当对象池装满时,React 从池中复用事件对象,派发给组件)

(先会运行document的事件,然后才会运行react注册的事件,因为react是在document注册的事件,当一个react事件被触发了就会冒泡,最终冒泡到document然后在由document触发那个react事件,然后react事件也会冒泡到上面的react元素)

注意事项

● 如果阻止了根节点的冒泡事件这样React的事件就不会运行了(因为document就监听不到React事件的调用了)
● 给真实的DOM元素注册事件都会先于React元素的事件执行(document事件委托)
● 通过React的事件中阻止事件冒泡,无法阻止真实的DOM事件(因为真实DOM都已经都冒泡到document了,再阻止也没有了,而且React元素的事件参数e不是一个真实DOM的事件参数e)
● 可以通过nativeEvent.stopImmediatePropagation(),阻止document上剩余事件的执行(和其他库配合之后的时候有可能用到,用来阻止其他库的事件执行)
● React的事件参数会被服用一个React用完之后会把事件参数重新赋值成null,等下一个事件用的事件就直接赋值就行,所以不要异步的使用React的事件参数(如果要异步使用React的事件参数就要使用e.persist()使这个事件参数持久化,这样就会浪费性能)

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:32:10  更:2022-10-08 20:33:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 16:16:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码