0

0

React为什么会出现?react出现的历史背景介绍

寻∝梦

寻∝梦

发布时间:2018-09-11 15:15:33

|

3033人浏览过

|

来源于php中文网

原创

本篇文章主要讲述的是关于react诞生的原因,关于react为什么会出现,react的历史背景资料等,现在就让我们一起来看这篇文章吧

React诞生的原因

React是Facebook开发的一款的JS库,那么Facebook为什么要创造React?
Facebook认为MVC无法满足他们的扩展需求,由于他们非常巨大的代码库和庞大的组织,使得MVC很快变得复杂,每当需要添加一项新功能或者特性时,系统的复杂就成级数的增长,致使代码变得脆弱而不可预测,结果导致他们的MVC正在土崩瓦解。认为MVC不适合大规模的应用。当系统中有很多模型和相应的视图时,其复杂度就会迅速扩大,非常难以理解和调试,特别是模型和视图可能存在双向数据流动。

解决这个问题需要“以某种方式组织代码,使其更加可预测”,这通过Flux和React已经完成

Flux是一个系统架构,用于推进应用中的数据单向流动。React是一个JavaScript框架,用于构建“可预期的”和声明式的”Web用户界面”,它已经使Facebook更快地开发Web应用。

主要来讨论React方面的问题:
React用来解决什么问题,官方网站上这样说道:

We build React to solve one problem:building large applications with data that changes over time.

构建数据会随着时间改变的大型应用,React主要有以下特点:

1.简单的表述任意时间点应用应该呈现的样子,React就会自动管理UI界面更新当数据发生变化的时候
   2.在数据发生改变时,React实际上仅仅更新了变化的一部分而已
   React是关于构造可重用组件的,实际上,使用React时,我们做的更多的是构建组件。通过封装,使得代码复用,测试以及关注点分离更加容易。

从React官方网站上,通过《Why did we build React?》了解到创建React文档的四个原因:
1.React不是一个MVC框架,React是一个构造可组合式用户界面的库。它鼓励创建可重用的UI组件会随着时间而改变的数据。
2.React不使用模板
传统上,web应用UIs使用模板或者html指令构造。这些模板规定一套完整的抽象使你可以去构建你的UI
不同的是,React处理构建用户界面通过将他们分解为组件。这意味着,React使用一个真正的,全功能的编程语言去渲染视图。
3.响应式更新非常简单
在一个传统的JS应用中,需要考虑数据变化然后指示DOM做出变化,使其保持最新的。甚至AngularJS,提供一个声明式接口经由指令和数据绑定请求一个关联的函数去手动更新DOM节点。(想看更多就到PHP中文网React参考手册栏目中学习)

React采用不同的方法,当组件第一次初始化时,render方法调用,为试图生成一个轻量级的表现。通过这个表现,产生一个标签字符串,然后插入文档中。当数据变化时,render方法再次被调用。为了尽可能有效的完成更新,我们比较值钱调用的render返回的值与新的值,然后产生一个最小的变更去应用DOM中。

render返回的数据既不是一个字符串也不是一个DOM结点。它是一个轻量级的类型,描述DOM应该是什么样子的。

4.HTML5仅仅是个开始
因为React有自己轻量级的文档表现,我们可以用它做一些很酷的事情
1.Facebook动态表格可以通过渲染取代HTML.
2.Instagram是一个’single page’网页应用完全由React和Backbone.Router构建的。设计者可以像通常一样使用JSX编写React代码。
3.我构建内部的应用雏形运行React在一个web工作站上,使用React去驱动本地ios视图通过一个Objective-C桥。
4.你可以运行React在服务器上,便于SEO、性能、代码分享和项目灵活性。
5.事件在全部现代浏览器(包括IE8)下表现一致性还有符合标准化,并且自动使用事件委派。

React的主要原理

Virtual DOM和虚拟DOM
传统的web应用中,操作DOM一般是直接更新操作的,但是我们知道DOM更新通常是比较昂贵的。而React为了尽可能减少对DOM的操作,提供了一种不同而有强大的方式来更新DOM,代替DOM直接操作。就是Virtual DOM,一个轻量级的虚拟DOM,就是React抽象出来的一个对象,描述DOM应该是什么样子,应该如何呈现。通过 这个Virtual DOM去更新更真实的DOM,而这个Virtual DOM管理真实的DOM更新。
为什么通过这多一层的Virtual DOM操作就能更快呢? 这是因为React有个diff算法,更新Virtual DOM并不保证马上影响真实的DOM,React会等到事件循环结束,然后利用这个diff算法,通过当前新的dom表述与之前的作比较,计算出最小的步骤更新真实的DOM。

React Diff

1.虚拟的DOM确保只对界面上真正发生变化的部分进行实际的DOM操作。
Web页面是由DOM树来构成的,当其中的某一部分发生变化时,其实就对应某个DOM节点发生了变化。在React中,构建UI界面的思路是由当前状态决定界面。前后两个状态对应两个界面,然后由react来比较两个界面的区别。
Facebook的工程师,他们对于web界面做了两个简单的假设,使得Diff算法复杂程度直接降到了O(n)
1.两个相同组件产生类似的的DOM结构,不同组件产生不同的DOM结构
2.对于同层次的一组子节点,他们可以通过唯一的id进行区分

在节点的同一位置前后输出了不同类型的节点,React直接删除前面的节点,然后创建并插入新的节点,删除节点就会彻底销毁该节点,如果该删除的节点下有子节点,那么这些子节点也会被完全删除,它们也不会被用户后面的比较

当React在同一个位置遇到不同的组件时,也是简单的销毁第一个组件,而把新创建的组件加上去。不同的组件一般会产生不一样的DOM结构,与其浪费时间去比较它们的结构,他们的结构基本上是不会等价的,还不如完全创建一个新的组件上去。

拍我AI
拍我AI

AI视频生成平台PixVerse的国内版本

下载

2.逐层次进行节点比较
在React中,树的算法很简单,两棵树只会对同层次的节点进行比较。把之前的树和修改之后的树进行节点同层次的比较,React对同一个父节点下所有的子节点进行比较。当发现节点已经不存在了,就会把这个节点和它的子节点完善删除掉,不会进行进一步的人比较,所以这样只要遍历一次树,就可以完成对DOM结构的比较。

React只会考虑同层节点位置的变换,对于不同层的节点,只有简单的删除和创建。当根节点发现子节点中的A不见了就会直接销毁A;而当D发现自己多了一个子节点,就会创建A作为子节点。

为了保持稳定的结构会有助于性能的提升,我们可以通过CSS隐藏或显示某个节点,而不是真正的移除或者添加DOM节点。

相同类型的节点,算法比较简单,React会对其属性进行重设而实现节点转换。
比如:
renderA:

renderB:

虚拟DOM的style属性稍微不同,其值并不是一个简单的字符串而必须是一个对象。

3.列表节点的比较:
React对于不在同一层的节点比较,即使它们完全相同,也会销毁并重新创建,当它们在同一层的时候就要用到列表节点的Diff算法,

74.png

如果不设置这个li 的key值,会造成列表在更新时候的性能问题。React不能很高效的去更新这个列表

Components 组件

在DOM树上的节点被称为元素,在这里则不同,Virtual DOM上称为commponent。Virtual DOM的节点就是一个完整抽象的组件,它是由commponents组成。

component 的使用在 React 里极为重要, 因为 components 的存在让计算 DOM diff 更高效。

本篇文章到这就结束了(想看更多就到PHP中文网React使用手册栏目中学习),有问题的可以在下方留言提问。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

550

2023.10.23

HTML与HTML5的区别
HTML与HTML5的区别

HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

470

2024.03.06

html5从入门到精通汇总
html5从入门到精通汇总

想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

295

2025.12.30

html5新老标签汇总
html5新老标签汇总

HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

228

2025.12.30

html5空格代码怎么写
html5空格代码怎么写

在HTML5中,空格不能直接通过键盘空格键实现,需使用特定代码。本合集详解常用空格写法:&nbsp;(不间断空格)、&ensp;(半个中文空格)、&emsp;(一个中文空格)及CSS的white-space属性等方法,帮助开发者精准控制页面排版,避免因空格失效导致布局错乱,适用于新手入门与实战参考。

106

2025.12.30

html5怎么做网站教程
html5怎么做网站教程

想从零开始学做网站?这份《HTML5怎么做网站教程》合集专为新手打造!涵盖HTML5基础语法、页面结构搭建、表单与多媒体嵌入、响应式布局及与CSS3/JavaScript协同开发等核心内容。无需编程基础,手把手教你用纯HTML5创建美观、兼容、移动端友好的现代网页。附实战案例+代码模板,快速上手,轻松迈出Web开发第一步!

165

2025.12.31

HTML5建模教程
HTML5建模教程

想快速掌握HTML5模板搭建?本合集汇集实用HTML5建模教程,从零基础入门到实战开发全覆盖!内容涵盖响应式布局、语义化标签、Canvas绘图、表单验证及移动端适配等核心技能,提供可直接复用的模板结构与代码示例。无需复杂配置,助你高效构建现代网页,轻松上手前端开发!

53

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

71

2025.12.31

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
c语言项目php解释器源码分析探索
c语言项目php解释器源码分析探索

共7课时 | 0.4万人学习

php初学者入门课程
php初学者入门课程

共10课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号