首页 > 其他分享 >【学习】【React】一文带你深入了解React的运行原理 走进200万工程师的技术圣地

【学习】【React】一文带你深入了解React的运行原理 走进200万工程师的技术圣地

时间:2024-09-10 18:49:10浏览次数:9  
标签:200 Fiber 架构 渲染 DOM 更新 React 圣地

原创 前端欧巴

前言

React 作为前端开发中非常流行的 JavaScript 库,以其高效、灵活的特性受到了广大开发者的青睐。
了解 React 的运行原理,对于提升开发效率和性能优化至关重要。
本文将深入探讨 React 的运行原理,从初始化、渲染、Diffing 算法、Fiber 架构到最终的 DOM 更新,全方位解析 React 的工作机制。

初始化

当一个 React 组件首次被加载到页面上时,React 会进行初始化操作。这个过程中,React 会构建出对应的虚拟 DOM 树(Virtual DOM Tree)。虚拟 DOM 是 React 用来表示真实 DOM 结构的一个轻量级 JavaScript 对象,它能够在内存中以极快的速度被创建、修改和销毁。通过 React 的 render 方法,这个虚拟 DOM 树会被转化为 HTML 语言,并插入到指定的 DOM 节点中。

渲染机制

渲染过程

React 的组件渲染会在初始化时执行一次,并且在组件的状态(state)或属性(props)发生变化时重新执行。
每次渲染都会构建完整的虚拟 DOM 树,但 React 使用了高效的 Diffing 算法来优化性能,只对发生变化的 DOM 元素进行实际的更新。

Diffing 算法

React 使用 Diffing 算法来比较当前虚拟 DOM 树和上一次的虚拟 DOM 树之间的差异。
这个算法会找出两个树之间的差异,并生成一个更新列表(即需要更新的 DOM 元素的列表)。
通过这种方式,React 只需更新变化的部分,而不是重新渲染整个页面,大大提高了性能。

Fiber 架构

在 React 的较新版本中,引入了 Fiber 架构。
Fiber 架构将组件树转换为 Fiber 树(链式存储),每个 Fiber 节点代表一个组件或 DOM 节点,并包含了与该节点相关的信息,如 props、state、子节点等。
Fiber 架构的引入使得 React 能够实现增量渲染和异步渲染,进一步提升了应用的性能和响应能力。

增量渲染

在 Fiber 架构中,React 会将渲染任务分解为多个小任务,并根据任务的优先级和时间片来动态地调度任务的执行顺序。
这种增量渲染的方式使得 React 能够在用户交互或数据更新时,以更平滑的方式更新 UI,减少卡顿现象。

更新流程

比较与更新

在每次渲染过程中,React 会通过 Diff 算法比较前后两个 Fiber 树的差异,标记出需要更新的 Fiber 节点,并构建一个更新队列。然后,React 会根据更新队列中的变更进行实际的 DOM 操作(添加、删除、更新)。

提交阶段

在提交阶段,React 会按照更新队列中的变更顺序,执行实际的 DOM 操作。
这些操作会被分解为多个小任务,并根据优先级和时间片来执行,以确保应用的性能和响应性。

图片来自于网络

总结

React 的运行原理是一个复杂而高效的过程,它通过虚拟 DOM、Diffing 算法和 Fiber 架构等机制,实现了高效的 UI 更新和性能优化。了解这些原理,不仅可以帮助我们更好地使用 React 进行开发,还能够提升我们的开发效率和代码质量。

标签:200,Fiber,架构,渲染,DOM,更新,React,圣地
From: https://www.cnblogs.com/o-O-oO/p/18406557

相关文章

  • react中的 Hook 使用规则
    如果你在React函数组件中定义一个函数,并且这个函数使用了React的Hook(如 useState、useEffect 等),那么这个函数就是一个Hook函数。普通函数可以在任何地方定义和使用,而Hook函数只能在React函数组件中使用。使用Hook的函数必须以 use 开头命名,这是React的规定......
  • 题单5:基础练习(rating1200)
    提醒对于下述语句,返回的是1(True)/0(False),即:条件语句的真假,而非后面的值之一。std::cout<<(a<b)?"Awin":"Bwin";如果需要返回值,则需要用括号包含整个条件运算符std::cout<<((a<b)?"Awin":"Bwin");题单492B.VanyaandLanterns......
  • React路由配置参考(记录)
    整体:登录页单独处理:将登录页单独处理,路径为/login。使用AuthLayout处理授权页面:AuthLayout可以作为一个高阶组件,确保用户登录后才能访问系统中的其他页面。加载主布局BasicLayout:BasicLayout可以用来加载系统的主布局,并通过routesRender(routesConfig)渲染配置文件中......
  • [IOI2000] 邮局 P10967/P4767/P6246
    P10967设在\(1\simi\)装了\(j\)个邮局的答案\(f_{i,j}\):\(f_{i,j}=\min\{f_{k,j-1}+w_{k+1,i}\}\),其中\(w_{l,r}\)为\(l\simr\)有一个邮局的最小距离。\(w_{l,r}\)怎么求?在中位点装邮局。那么有\(w_{l,r}=w_{l,r-1}+x_j-x_{[(i+j)/2]}\)。其中\(x\)是村庄位置。......
  • 20240910_104851 mysql 存储过程 2006班
    修改结束符号delimiter新符号创建一个存储过程要求:查询所有的老师信息只显示id与nameDELIMITER$CREATEPROCEDUREshow1()BEGIN SELECTid,NAMEFROMteacher;END$使用存储过程CALLshow1();查看存储过程的创建语句查看名为p1的存储过程的名称showcreatep......
  • 2000万的行数还是 MySQL 表的限制吗?
    传闻网络上一直流传着一种观点,认为在单个MySQL表中,数据的行数一旦超过2000万,表的性能就可能受到影响。这种观点主要源于早些时候使用HDD硬盘存储时的经验。2024年了,当我们使用基于SSD的MySQL数据库时,这种判断是否依然有效。换句话说,基于现代存储技术,MySQL表的行数是否仍然需要限......
  • 小红书虚拟赛道,0成本变现单日200+,3分钟生成图文【附教程】
    在小红薯做虚拟产品是一个有潜力的赛道,变现真的是很不错,操作起来也非常简单,做《小红书小学资料项目》0成本变现单日200+,这其实是一个老项目了,但又有新人复出且拿到了结果。项目内容很简单,一句话概括就是**小红书售卖小学教辅资料,**把用户引到私域进行转化再成交。为什么要......
  • Win11系统提示找不到ReactNativeXaml.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个ReactNativeXaml.dll文件(挑选合适的版本文......
  • 【最新华为OD机试E卷-支持在线评测】通过软盘拷贝文件(200分)多语言题解-(Python/C/Ja
    ......
  • React 中 useCallback 钩子的依赖项问题
    报错:The'getMergeMap'functionmakesthedependenciesofuseCallbackHook(atline192)changeoneveryrender.MoveitinsidetheuseCallbackcallback.Alternatively,wrapthedefinitionof'getMergeMap'initsownuseCallback()Hook.......