react原理及合成事件原理

文章目录

  • react的理解
  • react创建组件的三种写法
  • react的工作原理
  • 初始化的渲染流程。
  • 页面更新的流程。
  • diffing 算法计算更新视图
    • diff策略
  • react合成事件原理
    • 一、React合成事件的概念
    • 二、React合成事件的原理
    • 三、React合成事件的优势
    • 四、React合成事件的使用方法
    • 五、总结

react的理解

  1. 采用声明式渲染,函数式编程,声明显示内容,react自动完成
  2. 通过虚拟DOM,减少与DOM的交互
  3. 单向数据流,从父节点传递到子节点,父节点改变,子节点重新渲染,遵循不可变数据。
  4. 提高代码的复用率,通过react构建组件,让代码更容易得到复用
  5. react类组件使用render()方法或函数式组件return,接受输入的数据并返回需要展示的内容
  6. 代码可读性高
  7. 可以做劫持渲染(shouldcomponentupdate)

react创建组件的三种写法

  1. React.createClass
  2. React.Component
  3. 无状态的函数写法(纯组件)

react的工作原理

react的响应式理念,通过改变函数的data值,改变ui。实现一个组件或者功能需要先实现一个函数,改变函数的data值,来影响ui

初始化的渲染流程。

  • react用jsx语法写好逻辑。
  • 执行 ReactDOM.render 函数,渲染出虚拟DOM。
  • react 将虚拟DOM,渲染成真实的DOM。

页面更新的流程。

  1. 当页面需要更新时,通过声明式的方法,调用 setState 告诉 react什么数据变了。
  2. react 自动调用组件的 render 方法,渲染出虚拟 DOM。
  3. react 会通过 diffing 算法,对比当前虚拟 DOM 和需要更新的虚拟 DOM 有什么区别。然后重新渲染区别部分的真实 DOM

diffing 算法计算更新视图

render()调用后视图发生了变化,根据状态和jsx结构生成新的虚拟DOM,同级比较两棵虚拟DOM树的差异,得到差异对象,把差异对象应用到真正的DOM树上。

diff策略

1、tree diff
按照树的层级进行比较,如果该节点不存在,则整个删除,不再继续比较。
如果是跨层级的话,只有创建节点和删除节点的操作
2、component diff
每一层中组件的对比,同一类型的两个组件,按照层级比较虚拟DOM。组件A变化为组件B时,可能虚拟DOM没有任何变化,可以通过shouldComponentUpdata()来判断是否需要判断计算;不同类型的组件,将一个(将被改变的)组件判断为dirtycomponent(脏组件),从而替换整个组件的所有节点
3、element diff
如果两个组件类型相同,则需要对比组建中的元素。删除,插入,移动节点

同一组件中key的要素
1、通过key保证节点的唯一性,避免了重复渲染。如果key相同,则不需要重新计算并渲染。
2、key值是固定的,一般key值不用数组的下表索引值,当数组发生变化是,索引值会改变。

原文链接:https://blog.csdn.net/Jasmine_jieer/article/details/126404865

react合成事件原理

React是-个流行的JaaScript库,用构建用户界面。它采用了一种特殊的事件处理机制,即React合成事件。本文将详细个绍React合成事件的原理及其重要性。

一、React合成事件的概念

React合成事件是指React通过在浏览器上绑定一系列事件处理函数,来处理用户与界面的交互行为。它的设计目标是提供一种高效、跨浏览器的事件系统,同时也解决了传统原生事件处理中一些常见的问题。

二、React合成事件的原理

1.事件委托:React合成事件利用了事件委托的机制,将事件绑定在顶层的容器上,而不是每个具体的元素上。这样做的好处是减少了事件处理函数的数量,提高了性能
2.事件池: React合成事件使用了事件池的概念。事件池是一个复用的对象池,用于存储事件对象。当事件被触发时React会从事件池中取出一个事件对象,并将相关信息填充到该对象中,然后传递给事件处理函数。事件处理函数执行完毕后,事件对象会被重置并放回事件池中,供下次使用。
3.统一化事件处理: React合成事件封装了原生事件对象,提供了一套统一的AP1,使得事件处理函数在不同浏览器下表现一致。这样开发者无需关心浏览器兼容性的问题,可以更专注于业务逻辑的实现。

三、React合成事件的优势

1.性能优化:由于利用了事件委托和事件池的机制,React合成事件大大减少了事件处理函数的数量,提高了性能。另外,事件池的复用机制也减少了对象的创建和销毁,进一步减少了内存消耗
2.事件处理函数的统一性: React合成事件封装了原生事件对象,并提供了一致的API,使得开发者可以更方便地处理事件。这对于跨浏览器的开发是非常重要的。
3.防上事件冒泡: React合成事件默认会阻止事件冒泡,这在一些场景下非常有用。开发者可以通过调用event.stopPropagation(来手动阻止事件冒泡。

四、React合成事件的使用方法

使用React合成事件非常简单。开发者只需在元素上绑定事件处理函数即可。例如,要为一个按钮添加点击事件处理区数,可以使用以下代码:


import React from 'react!.
class MyButton extends React.Component {
handleClick = (event) => [
console.log(按钮被点击了!;
render() [
return (
<button onClick={this.handleClickI>点击我</button>

在上述代码中,我们在按钮元素上绑定了一个点击事件处理函数handleClick。当按钮被点击时,控制台将会输出"按钮被点击了!"。

五、总结

React合成事件是React框架中非常重要的一部分,它通过事件委托、事件池和统一化事件处理等机制,提供了高效、跨浏览器的事件系统。使用React合成事件可以有效地提高性能,简化开发流程,并保证事件处理函数在不同浏览器下的致性。因此,掌握React合成事件的原理和使用方法对于React开发者来说是非常重要的。

简单说就是:react是在原生浏览器的枝上做了一层封装,把对应事件做了一次合成,最大的好处是合成事件可以匹配不同浏览器之间的差异,比如事件委托、事件池、事件合并这些

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小型机加工工厂MES系统选型指南

随着制造业的不断发展&#xff0c;越来越多的企业开始关注生产过程的管理和优化。对于小型机加工工厂来说&#xff0c;选择一款合适的MES系统&#xff08;制造执行系统&#xff09;能够显著提高生产效率、降低成本、优化资源利用&#xff0c;从而在激烈的市场竞争中脱颖而出。 …

HTTP之常见问答

1&#xff1a;HTTP/1.1 如何优化&#xff1f; &#xff1a;尽量避免发送 HTTP 请求&#xff1b;通过缓存技术&#xff0c;使用请求的 Etag 参数来处理判断缓存过期等问题&#xff0c;类似304状态码就是告诉客户端&#xff0c;缓存有效还能继续使用 &#xff1a;在需要发送 HTTP…

创建域名邮箱邮件地址的方法与步骤

如何创建域名邮箱邮件地址?使用Zoho Mail创建域名邮箱邮件地址的步骤简单易懂&#xff0c;操作便捷。从其他邮箱迁移到Zoho Mail的过程也相当顺畅&#xff0c;您可以轻松为所有员工创建具有企业邮箱域名的电子邮件地址。 步骤1&#xff1a;添加并验证您的域名 首先&#xff0c…

rook-ceph部署

rook是云原生存储编排器&#xff0c;本身不提供存储。 下载 git clone --single-branch --branch v1.11.4 https://github.com/rook/rook.git cd rook/deploy/examples 修改镜像地址images.txt operator方式部署rook kubectl apply -f crds.yaml -f common.yaml -f operator…

动态顺序表

目录 一、动态顺序表结构定义 二、动态顺序表初始化 三、动态顺序表打印 四、动态顺序表尾插 五、封装扩容函数 六、动态顺序表头插 七、动态顺序表的尾删 八、动态顺序表的头删 九、动态顺序表任意位置插入 十、动态顺序表任意位置删除 十一、动态顺序表销毁 十二、…

【计算机网络学习之路】网络基础1

文章目录 前言一. 计算机网络发展局域网和广域网 二. 网络协议三. OSI七层模型四. TCP/IP四层&#xff08;五层&#xff09;模型五. 计算机体系结构与网络协议栈六. 协议形式及局域网通信数据包封装与分用 七. 跨网络通信八. MAC地址与网络通信的理解结束语 前言 本系列文章是…

人工智能带来的各方面影响

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在各个领域中的应用越来越广泛&#xff0c;已经开始对我们的生活方式、社会和经济结构产生深远的影响。 1.人工智能家庭化。人工智能技术使我们的生活变得更加便利和智能化。在家庭日常中&#xff0c;智能家居、智能…

什么是深度学习

一、深度学习的发展历程 1.1 Turing Testing (图灵测试) 图灵测试是人工智能是否真正能够成功的一个标准&#xff0c;“计算机科学之父”、“人工智能之父”英国数学家图灵在1950年的论文《机器会思考吗》中提出了图灵测试的概念。即把一个人和一台计算机分别放在两个隔离的房…

【SpringBoot3+Vue3】四【基础篇】-前端(vue基础)

目录 一、项目前置知识 二、使用vscode创建 三、vue介绍 四、局部使用vue 1、快速入门 1.1 需求 1.2 准备工作 1.3 操作 1.3.1 创建html 1.3.2 创建初始html代码 1.3.3 参照官网import vue 1.3.4 创建vue应用实例 1.3.5 准备div 1.3.6 准备用户数据 1.3.7 通过…

C++循环队列(模板类)

C循环队列&#xff08;模板类&#xff09; 一、简介二、具体实现 一、简介 循环队列是一种基于数组实现的队列数据结构&#xff0c;其特点是队尾和队头通过模运算相连&#xff0c;形成一个环形结构。这种设计可以有效地利用数组空间&#xff0c;避免因出队操作导致队列空间的浪…

【SQL】简单博客开发代码

前几天做到一些CMS的题&#xff0c;涉及一些sql的代码审计&#xff0c;于是尝试着自己开发一个连接数据库的博客&#xff0c;加深一遍理解 简单实现了登录&#xff0c;验证&#xff0c;登出&#xff0c;目录&#xff0c;增删改查等功能 下面贴代码 conn.php <?phpsessi…

传输层协议 - TCP(Transmission Control Protocol)

文章目录&#xff1a; TCP 协议关于可靠性TCP 协议段格式序号与确认序号六个标志位16位窗口大小 确认应答&#xff08;ACK&#xff09;机制超时重传机制连接管理机制连接建立&#xff08;三次握手&#xff09;连接终止&#xff08;四次挥手&#xff09;TIME_WAIT 状态CLOSE_WAI…

ifconfig

ifconfig ifconfig 是用于配置和显示系统网络接口信息的命令。以下是 ifconfig 输出中常见的一些术语的解释&#xff1a; 网卡&#xff08;Network Interface Card&#xff0c;NIC&#xff09;&#xff1a;网卡是计算机连接到网络的硬件设备&#xff0c;也称为网络适配器或网卡…

V8引擎隐藏类(VIP课程)

上一章我们讲了V8如何存储的对象&#xff0c;其中提到了隐藏类&#xff0c;这一章我们来看看隐藏类到底做了什么。 为什么要讲V8&#xff1f;&#xff1f;&#xff1f;&#xff1f; 隐藏类是V8引擎在运行时自动生成和管理的数据结构&#xff0c;用于跟踪对象的属性和方法 隐藏…

Transformers库总体介绍

Transformers库是什么 Transformers 库是一个在自然语言处理&#xff08;NLP&#xff09;领域广泛使用的强大库&#xff0c;提供了一套全面的工具和预训练模型&#xff0c;用于执行各种 NLP 任务。以下是 transformers 库提供的主要功能&#xff1a; 1.预训练模型&#xff1a…

利用多核的Rust快速Merkle tree

1. 引言 利用多核的Rust快速Merkle tree&#xff0c;开源代码见&#xff1a; https://github.com/anoushk1234/fast-merkle-tree&#xff08;Rust&#xff09; 其具有如下属性&#xff1a; 可调整为任意高度构建root复杂度为O(n)提供了插入和获取叶子节点的方法获取某叶子节…

【嵌入式】将PDF转成PNG

客户给了一个PDF文档,转成PNG后放在项目中 PDF_FILE=$1 OUT_FILE=$2 TMP_FILE=./tmp/ rm -rf ${TMP_FILE} mkdir ${TMP_FILE} gs -sDEVICE=png256 -o "${TMP_FILE}%02d.png" -r144

比Postman强在哪里

Postman的受众对象主要是广大开发人员&#xff0c;调测使用&#xff0c;它并不能完全满足专业测试人员需求&#xff0c;而自动化测试平台可以 1&#xff0c;Postman&#xff0c;Jmter是单机版软件&#xff0c;类似打游戏你和电脑PK&#xff0c;而很多时候是要联网和其他人团队作…

一文带你了解MySQL数据库基础

✏️✏️✏️今天给各位带来的是关于数据库基础方面的知识。 清风的CDSN博客 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; 动动你们发财的小手&#xff0c;点点…

【SA8295P 源码分析 (三)】129 - GMSL2 协议分析 之 Video Frame 帧数据结构分析 PCLK 计算公式

【SA8295P 源码分析】129 - GMSL2 协议分析 之 Video Frame 帧数据结构分析 & PCLK 计算公式 一、GMSL2 Video Frame 数据分析1.1 视频帧数据结构组成1.2 PCLK 计算公式二、GMSL2 协议 Video 数据带宽计算三、双加载模式 Double Loading Mode四、零填充模式 Zero-Padding M…