1 React合成事件特点

React自己实现了一套高效的事件注册,存储,分发和重用逻辑,在DOM事件体系基础上做了很大改进,减少了内存消耗,简化了事件逻辑,并最大化的解决了IE等浏览器的不兼容问题。与DOM事件体系相比,它有如下特点

  1. React组件上声明的事件最终绑定到了document这个DOM节点上,而不是React组件对应的DOM节点。故只有document这个节点上面才绑定了DOM原生事件,其他节点没有绑定事件。这样简化了DOM原生事件,减少了内存开销
  2. React以队列的方式,从触发事件的组件向父组件回溯,调用它们在JSX中声明的callback。也就是React自身实现了一套事件冒泡机制。我们没办法用event.stopPropagation()来停止事件传播,应该使用event.preventDefault()
  3. React有一套自己的合成事件SyntheticEvent,不同类型的事件会构造不同的SyntheticEvent
  4. React使用对象池来管理合成事件对象的创建和销毁,这样减少了垃圾的生成和新对象内存的分配,大大提高了性能

那么这些特性是如何实现的呢,下面和大家一起一探究竟。

2 React事件系统

先看Facebook给出的React事件系统框图

浏览器事件(如用户点击了某个button)触发后,DOM将event传给ReactEventListener,它将事件分发到当前组件及以上的父组件。然后由ReactEventEm

React源码分析7 — React合成事件系统相关推荐

  1. react源码分析-setState分析

    前言 是否有过这样的疑问: setState做了什么? setState是如何触发ui变化的? isWorking 如果此时isWorking为true,react将不会立即执行更新操作,而是把更新操 ...

  2. 推荐一个 React 技术揭秘的项目,自顶向下的 React 源码分析

    大家好,我是你们的 猫哥,那个不喜欢吃鱼.又不喜欢喵 的超级猫 ~ just-react 这本书的宗旨是打造一本严谨.易懂的 React 源码分析教程. 为了达到这个目标,在行文上,本书会遵循: 不预 ...

  3. 窥探React - 源码分析

    所谓知其然还要知其所以然. 本文将分析 React 15-stable的部分源码, 包括组件初始渲染的过程和组件更新的过程.在这之前, 假设读者已经: 对React有一定了解 知道React elem ...

  4. React源码分析(二)= Reac初次渲染分析

    文章目录 1. render阶段 legacyRenderSubtreeIntoContainer 1.1. legacyCreateRootFromDOMContainer 1.1.1. React ...

  5. React源码分析(一)= scheduler分析

    文章目录 1. 前言 2. getCurrentTime 3. unstable_scheduleCallback函数 4. scheduleHostCallbackIfNeeded 4.1. flu ...

  6. React源码分析与实现(一):组件的初始化与渲染

    原文链接地址:github.com/Nealyang 转载请注明出处 前言 战战兢兢写下开篇...也感谢小蘑菇大神以及网上各路大神的博客资料参考~ 阅读源码的方式有很多种,广度优先法.调用栈调试法等等 ...

  7. React源码解读之React Fiber

    开始之前,先讲一下该文章能帮你解决哪些问题? 开始之前,先讲一下该文章能帮你解决哪些问题? facebook为什么要使用重构React React Fiber是什么 React Fiber的核心算法 ...

  8. react源码分析:深度理解React.Context

    开篇 在 React 中提供了一种「数据管理」机制:React.context,大家可能对它比较陌生,日常开发直接使用它的场景也并不多. 但提起 react-redux 通过 Provider 将 s ...

  9. React源码分析2 — 组件和对象的创建(createClass,createElement)

    1 组件的创建 React受大家欢迎的一个重要原因就是可以自定义组件.这样的一方面可以复用开发好的组件,实现一处开发,处处调用,另外也能使用别人开发好的组件,提高封装性.另一方面使得代码结构很清晰,组 ...

最新文章

  1. 微信公众号服务器数据情况,获取新榜微信公众号指数信息,并服务器上部署
  2. Ora-12154:无法解析连接字符串
  3. python opencv生成模糊图像
  4. python发明者叫什么-近 50 年来最具影响力的 10 种编程语言,都是谁发明的?
  5. 【Web安全】内网渗透研究之利用MSF和Impacket工具拿域控
  6. java基础知识大全,java 基础知识点汇总
  7. Java基础之正则表达式
  8. 从蚂蚁金服实践入手,带你深入了解 Service Mesh
  9. python中break和continue的区别_python中break和continue的区别
  10. 【Java】优雅停机时的一点思考
  11. 不用担心越界,不用中间变量的数值交换
  12. 黑马day16 aptana插件的安装
  13. zookeeper集群节点热扩容和迁移详解
  14. VC++下使用ADO编写数据库程序(关键文章)
  15. 快速取得三位数的个位,十位,百位
  16. 添加WhatsApp链接教程
  17. 一款java游戏收齐绿宝石哈,神奇宝贝绿宝石游戏
  18. 微博粉丝、关注批量删除
  19. 学会Zynq(10)lwIP简介
  20. 机械革命 键盘灯 linux,机械革命x6Ti安装ubuntu(100%成功)

热门文章

  1. SAP ODATA disable CSRF_TOKEN
  2. Micro-World
  3. Java JVM虚拟机选项Xms/Xmx/PermSize/MaxPermSize(转)
  4. leaflet ajax geojson,WebGIS教程 LeafletJS 使用 GeoJSON
  5. SpringBoot+MybatisPlus+Vue项目(一):登录验证
  6. 自适应布局和响应式布局
  7. 高薪招聘能讲课的JAVA程序员,专、兼职均可
  8. 基于asp的大学校友录
  9. antd <Input.Search>中 onChange(e) 实时拿到当前输入的值
  10. hc05与单片机连接图_单片机实例分享,快递追踪器