什么是反应? ⚛️
React 是一个 JavaScript 库,它可以帮助我们更快、更高效地构建 Web 应用程序。它可以使用单页应用程序(SPA)模型更好地处理数据和工作。虽然这是一个简洁的定义,但我发现另一个更全面的定义:
“React 是一个非常流行的 JavaScript 库,它使用组件和状态来构建用户界面 (UI)。它由 Facebook 开发。”
- 乔纳斯·施梅特曼
注意:从这里开始,我假设您对 React 有一定的了解或者以前使用过它。
React 是如何工作的?
React 完全基于组件 的概念。组件是 UI 中可以重用的较小部分。现在,让我们来看看代码如何变成您在屏幕上看到的 UI 的过程。
组件 → 组件实例 → React 元素 → DOM 元素 → 屏幕上的 UI
现在您已经了解了组件是什么,让我们深入了解组件实例,它们是组件的实际工作版本。本质上,组件就像蓝图或模板。当我们创建组件实例时,我们传递 props 并为其分配特定的状态。这些实例是我们在 React 中使用的。
如果你想更深入地了解这个概念,我建议在 Medium 上搜索 “React 组件、实例和元素”。
现在,我的目标是解释接下来发生的过程:
React 元素 → DOM 元素 → 屏幕上的 UI
这个过程分为四个阶段,我们将一一探讨:
- 渲染已触发
- 渲染阶段
- 提交阶段
- 浏览器画图
1. 渲染被触发
渲染可以在两种情况下触发:
- 初始渲染:首次加载应用程序时会发生这种情况。
- 状态更新(重新渲染):当应用程序发生更改时(通常是状态更改时),会发生这种情况。
此阶段没有发生太多事情,所以让我们继续下一阶段。
2. 渲染阶段
现在,让我们重新定义“渲染”的含义。作为前端开发人员,我们经常使用术语 render 来描述 UI 中的更改。但这并不完全准确。 React 中的渲染意味着为下一阶段准备 UI。
渲染阶段涉及几个步骤:
步骤1:触发重新渲染的组件实例
这是 React 检测到组件中发生更改的时候。
第 2 步:反应元素
此步骤涉及收集项目中的所有组件并构建所谓的虚拟 DOM 树。该树将组件之间的关系概述为节点,其中每个父组件都有其子组件。
这里有一点很重要:当父组件发生变化时,它的所有子组件也会重新渲染。
在这个阶段,几件事情同时发生:
- 首先,React 创建虚拟 DOM 树。
- 接下来,协调器介入。它负责识别发生了什么变化。在 React 中,协调器称为 Fiber.
如果您想详细探索 Fiber,您可以查看:
- Medium 上的“什么是 React Fiber 以及它如何帮助您构建高性能 React 应用程序”。
- Dhiwise 上的“使用 React Fiber 构建高性能应用程序”。
什么是纤维?
Fiber 是负责协调组件变化的引擎。它告诉我们什么改变了,什么被删除了,什么被添加了。这是一个简化的解释,但 Fiber 涉及几个关键概念:
- 协调:标识更改(添加、更新或删除 DOM 元素)。
-
Diffing:一种高度优化的算法,用于将当前 DOM 与虚拟 DOM 进行比较。它基于两个规则运行:
- 如果 DOM 元素的类型发生变化。
- 如果属性或道具发生变化。
此算法将运算速度从 O(n³) 加速到 O(n),从而提高了应用程序性能。
-
纤维树:此树是在初始渲染期间创建的。它镜像虚拟 DOM 树,但有所不同。它提供了以下方面的见解:
- 当前状态
- 道具
- 副作用
- 用过的挂钩
- 工作队列
渲染阶段是异步的,这意味着它可以根据需要暂停、恢复、取消或确定优先级。这允许 React 在应用程序运行时不断更新 Fiber Tree。
此阶段的最终结果是效果列表,它将传递到下一阶段。
3. 提交阶段
在此阶段,React 获取在渲染阶段生成的 效果列表 并将这些更改应用到 DOM。这是由另一个库 ReactDOM 处理的。 ReactDOM 负责根据 React 识别的更改来操作实际 DOM。
重要注意事项:React 负责创建 UI 结构,而 ReactDOM 则处理特定于浏览器的操作。这意味着对于不同的平台(例如 React Native),不同的库(例如 React Native 管理 UI 的渲染方式。
提交阶段必须同步,因为我们无法部分渲染我们的界面。更改需要立即应用。
4. 浏览器画图
这最后一步超出了 React 的范围。它涉及浏览器的渲染引擎将更改绘制到屏幕上。每个浏览器对此的处理方式不同,值得研究特定于浏览器的渲染过程。
如果您对浏览器的工作原理感兴趣,请查看:
- MDN 上的“填充页面:浏览器如何工作”。
- web.dev 上的“渲染树构建、布局和绘制”。
- Medium 上的“浏览器渲染剖析:网页如何变得栩栩如生”。
- Medium 上的“什么是 DOM 以及 HTML 渲染如何在浏览器中发生”。
进一步阅读:
如果您有兴趣深入了解,这里有一些有用的资源:
- GitHub 上的“react-fibre-architecture (acdlite)”。
- React.dev 上的“渲染并提交”。
- 2024 年终极 React 课程:React、Next.js、Redux 等 作者:Jonas Schmedtmann。
以上是了解 React 的工作原理的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

简单JavaScript函数用于检查日期是否有效。 function isValidDate(s) { var bits = s.split('/'); var d = new Date(bits[2] '/' bits[1] '/' bits[0]); return !!(d && (d.getMonth() 1) == bits[1] && d.getDate() == Number(bits[0])); } //测试 var

本文探讨如何使用 jQuery 获取和设置 DOM 元素的内边距和外边距值,特别是元素外边距和内边距的具体位置。虽然可以使用 CSS 设置元素的内边距和外边距,但获取准确的值可能会比较棘手。 // 设置 $("div.header").css("margin","10px"); $("div.header").css("padding","10px"); 你可能会认为这段代码很

本文探讨了十个特殊的jQuery选项卡和手风琴。 选项卡和手风琴之间的关键区别在于其内容面板的显示和隐藏方式。让我们深入研究这十个示例。 相关文章:10个jQuery选项卡插件

发现十个杰出的jQuery插件,以提升您的网站的活力和视觉吸引力!这个精选的收藏品提供了不同的功能,从图像动画到交互式画廊。让我们探索这些强大的工具: 相关文章: 1

HTTP-Console是一个节点模块,可为您提供用于执行HTTP命令的命令行接口。不管您是否针对Web服务器,Web Serv

本教程向您展示了如何将自定义的Google搜索API集成到您的博客或网站中,提供了比标准WordPress主题搜索功能更精致的搜索体验。 令人惊讶的是简单!您将能够将搜索限制为Y

当div内容超出容器元素区域时,以下jQuery代码片段可用于添加滚动条。 (无演示,请直接复制到Firebug中) //D = document //W = window //$ = jQuery var contentArea = $(this), wintop = contentArea.scrollTop(), docheight = $(D).height(), winheight = $(W).height(), divheight = $('#c


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver Mac版
视觉化网页开发工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。