大家好,我是Echa。
时光飞逝,React 默默的陪伴咱们前端开发者十个年头了。小编第一次接触React 的时候那是2014年初到时候,那时写着Jquery 语法实现Web 网页动态炫酷效果,也是蛮爽的。但是自从接触React 的时候,瞬间觉得Jquery 不怎么香了,因为用Jquery 写太复杂的项目,太费劲了。但是尝试用React 来写组件和功能模块化,那是非常爽的。小编推测着react 觉得会火起来,于是网上深入了解,居然是Facebook 团队开源出来的,怪不得这么超前的编程思想方式。
小编没有记错的话,2013年5月29号Facebook 团队 正式宣布 React 开源。到现在为止已经足足十年整!自发布以来,React 已经成为前端开发领域中最受欢迎的技术之一,其生态系统越来越丰富,Github 累计获得了 208k Star,每月 npm 平均安装量达到了 200w。小编带领大家一起总结十年来 React 的重要里程碑!
先一起回顾小编之前React 学习相关的优质文章:
React团队建议:Create React App 替换成 Vite
全文大纲
- 前端发展背景
- React 诞生原由
- React 简单介绍
- React 2010年最初迹象
- React 2011年早期原型
- React 2012年Facebook入局
- React 2013年发布之年
- React 2014年扩张之年
- React 2015年稳定之年
- React 2016年成为主流
- React 2017年改进之年(React Fiber 发布)
- React 2018年React v16.3.0 发布
- React 2019年React Hooks 发布
- React 2020年更新更简单
- React 2021年计划React v18
- React 2022年React v18.0 正式发布
- React 2023年至今持续改进
- React 未来
前端发展背景
前端混沌时代在“前端混沌时代”,页面主要在服务端开发并生成,服务端生成什么页面,浏览器端就展示什么样的页面,这个时代,是多么单纯。
小前端时代随后进入“小前端时代”,形成了以HTML为骨架,CSS为外貌,JavaScript为交互体验的前端开发模式,在这个时代,出现了Ajax这种划时代意义的技术,让静态网页升级为动态网页,并随着JavaScript的发展,前端能做更加多样的页面。当时出现了jQuery这类JS工具库,主要用来「操作DOM」,「处理数据交互」,至今仍有很多老旧项目依然在使用jQuery。
大前端时代在小前端时代稳定发展一段时间之后,工程师们开始发现前端「需要呈现的数据量越来越大」,「网页动态交互效果也越来越多」,jQuery这类工具库「越来越频繁操作DOM」,使得应用性能越来越差,页面越来越卡,慢慢前端大佬们开始解决这些问题。
在2009年诞生了NodeJS,将前端带入全新方向,为AngularJS(2009年诞生),React(2011年诞生)和Vuejs(2014年诞生)三大框架的「诞生奠定基础」。这些框架通过一定的分析比较算法,实现同等效果下最小的DOM开销,提高应用性能。前端开发进入“大前端时代”。
全栈前端时代“大前端时代”之后NodeJS社区蓬勃发展,4G网络也在不断普及发展,很多传统PC网站开始转向手机、平板等移动端设备,开始出现了混合应用技术(Hybrid APP),出现了各种开发框架,如Cordova、React-Native、Weex、Electron等,还有最近比较火的Flutter。
随着TypeScript的出现,和ECMAScript标准日渐完善,「前端开发正在朝着更加全能化」,「多样化和更加细分领域的方向发展」。
更多的前端发展史请见小编之前整理的这篇:盘点28个前端里程碑式的Github开源项目
React 诞生原由
React是Facebook在2013年开源的一款前端框架,在这之前,Facebook工程师开发一个简单功能时,如下图界面中“小红点”功能:
在导航栏中有“新好友”、“新消息”和“新动态”三个功能按钮,这其实功能挺简单,但却经常出BUG,比如“收到新消息后,新消息的图标上数字没有正确更新”等问题。「他们找寻出现这种问题的深层次原因」,最终总结为两个原因:「工程师太过关注UI层面的细节操作」;「应用程序的状态较为分散,无法追踪和维护」。
这里再介绍下React出现的时代背景:「大量业务逻辑由后端转为前端实现」,即前后端分离;已有前端框架开发的「复杂应用性能不佳」。
当时由于Ajax技术兴起,大量原来由服务端处理的逻辑,慢慢转移到前端做处理,这也是为了追求更流畅的Web交互体验。后来为了「提升开发效率和应用性能」,开始有很多大型前端框架出现(如:AngularJS),这些框架也让工程师们越来越关注UI层面的操作(如:频繁操作DOM),「应用性能越来越差」,并伴随无法预知的BUG出现,就像前面讲到的Facebook工程师总结的原因之一。
之后Facebook工程师开始打造自己的前端框架,解决前面总结的问题,于是React就诞生啦!
React 简单介绍
官网:https://react.dev/
Github:https://github.com/facebook/react
React是Facebook用以开发单页应用(Single Page Applications,SPA)而发布的一款前端框架。那么问题来了,什么是“单页应用”呢?要想理解这个概念,我们要从传统的服务端(Server-side)应用开始。对于Server-side application 服务端应用而言,服务器负责处理业务逻辑、存储数据和网站渲染。当用户在客户端点击了一个链接,它就会向网站服务器发送一个请求,网站在接到请求后会根据预先定义好的业务逻辑返回一个包含HTML的响应,浏览器接收响应然后将其中的HTML渲染出来展示给用户。
这种方式存在一个问题,就是服务器接收并处理了大量的请求。例如,当我们去到一个网站然后点击“首页”,我们就向服务器发送了一个请求然后服务器响应请求返回页面,当我们点击“关于”链接时,就又向服务器发送了一个请求然后服务器又响应这个请求返回页面,如此往复。问题的关键在于,这种方式建立的网站是由离散的网页组成的,当用户在这些网页间跳转时,浏览器要不断发送请求,服务器要不断地相应请求,加载并渲染不同页面的HTML文件。
大量的请求和响应消耗了大量的时间和资源导致网页的加载缓慢,然而移动端和桌面端的应用在大多数时间却能保证流畅的使用体验。React也想将这种流畅性带到浏览器中的网页应用中,那么怎么样才能做到呢?答案就是减少频繁的请求和页面加载。
在“单页应用”中用户仍然可以点击应用中的各种链接来进行页面切换,但是这次处理的逻辑却不一样了,客户端将会接收请求并自己内部处理而不再向Server发送请求,客户端通过JavaScript直接渲染出新HTML页面,而服务器则只负责向客户端提供应用数据。在SPA的模式下,客户端不必总是等待服务器的响应,而服务器也省去了向客户端发送页面的任务。本质上就是将服务器上的页面渲染的任务分给了客户端,两者达成了平衡实现了效率最大化。当然能做到这点,其实和硬件的进步以及浏览器发展有很大关系,硬件和浏览器的发展使得客户端计算能力提高可以承担更多的任务具有了一定独立性,而不必像以前完全依赖于服务器,实际上SPA仅仅需要服务端的数据。
此外,在SPA中,浏览器加载一个HTML文件之后用户在此页面进行跳转时用户仍会停留在当前的页面上不会像以前一样打开新的标签页窗口,因为SPA通过JavaScript在单一页面完成HTML的卸载和加载从而原地变化浏览器视图。用户虽然感觉上是在不同的页面来回穿梭导航,但实际上仍然是在同一个页面。
react的优缺点
优点:
1.一切皆组件:在react中几乎都是使用组件进行开发,好处:提高代码的复用率和可维护性
2.速度快:在react中提供了虚拟DOM机制(virtual DOM)
3.跨浏览器兼容:在react中采用虚拟DOM,不直接解析真实的DOM,解决了跨域浏览器兼容的问题,甚至在IE8中都可以使用。
4.同构,纯粹的JavaScript:在整个项目开发中,几乎都是使用JavaScript进行开发
5.单向数据流:在react中提供了两个架构:flux和redux来构建单向数据流
缺点:
1.不是一个完整的框架
2.react顶多在MVC中算V层(视图层),一般需要结合reactRouter和redux来构建完整的项目。
React 2010年最初迹象
Facebook 开源了PHP 语言 的一种扩展叫—— XHP,可以在 PHP 中创建 Composite Components。你去看 XHP 就会发现语法和 JSX 很像。事实上,之后,他们也将这种新语法引入到了 React 中。
React 2011年早期原型
2011 年,Facebook 工程师 Jordan Walke 创建了 FaxJS,它是 React 的早期原型,几个月后,Facebook 的团队使用完全由 React 和 Flux 提供支持的版本构建了点赞和评论功能。
React 2012年Facebook入局
2012-Facebook新变化FBAD管理难度加深,FB需要找到更好解决方案,JordanWalke基于原型创建了react。2012年4月9日,Facebook 收购Instagram,Instagram想使用FB的新技术。基于此,FB受压之下考虑解耦并开源React。这些大部分由PeteHunt完成。2012年9月8日至12日:TechCrunchDisrupt旧金山峰会上,马克扎克伯格表示:我们最大的错误就是押太多宝在HTML5上了。他承诺FB将会很多提供更好的移动体验。
这就存在一个问题:React 与 Facebook 的软件技术栈紧密集成。Pete Hunt 当时建议将 React 与 Facebook 解耦,并完成了将其解耦所需的大部分工作,从而使 React 成为开源软件。
React 2013年发布之年
在 2013 年 5 月 29 日至 31 日举行的 JS ConfUS 期间,Jordan Walke 向全世界介绍了 React,宣布 React 成为一个开源项目。他表示:“在构建我们的组件框架时,我们力求最小化暴露给开发者的面向开发者的变化的数量”。当时的观众持都对 React 持怀疑态度,认为 React 代表了代码可维护性方面的重大倒退,因为将 HTML 嵌入到了 JavaScript 中。大多数“早期采用者”都参加了这次会议。
React 2014年扩张之年
2014 年初,随着开发人员开始采用 React,React 的创建者计划了参观和会议来建立社区,来赢得开发者的认可,并帮助他们认识到 React 是为创新而设计的。同时,React Developer Tools也成为了 Chrome Developer Tools 的官方扩展。同年,发布了 React Hot Loader,一个允许 React 组件在不丢失状态的情况下实时重新加载的插件。
React 2015年稳定之年
在 2015 年 1 月的 React.js 大会上的技术演讲中,Facebook 发布了 React Native 的第一个版本,可以轻松进行 Android 和 iOS 开发。
此外,React v0.13 于 2015 年 3 月发布,最引人注目的新特性是对 ES6 类的支持,这让开发人员在编写组件时具有更大的灵活性。Dan Abramov 和 Andrew Clark 发布了Redux,同时也推出了第一个稳定版的 React Developer Tools。
React v0.14 于 2015 年 10 月发布,此版本带来了一些重大变化。主要的 react 包被拆分为 react 和 react-dom,这使得编写在 Web 版本的 React 和 React Native 之间共享的组件成为可能。此外,refs 作为 DOM 节点本身暴露给 DOM 组件。
那时,React 开始获得广泛认可,并被一些大型企业使用,如 Netflix 和 Airbnb。
React 2016年成为主流
2016 年 4 月,React 从版本 0.14.7 切换到主要稳定版本:React v15.0。这展示了对稳定性的承诺以及在次要版本中引入新的向后兼容功能的能力以及 React 向前发展的持续进步. 该版本中的一些重大变化改进了我们与 DOM 交互的方式:
- 挂载组件时使用 document.createElement 而不是设置 innerHTML,这在现代浏览器中速度更快,并且它也修复了一些边缘情况。
- 函数组件可以返回 null。
- 改进了对 SVG 的支持,添加了对当今浏览器可识别的所有 SVG 属性的支持。
为了使生产环境下的调试更加容易,在推出的 15.2.0 中引入了错误代码系统,React 团队开发了一个脚本来收集所有的不变错误消息并将它们放在一个 JSON 文件中,并且在构建时 Babel 使用 JSON 重写在生产中的不变调用以引用相应的错误 ID。当生产出现问题时,React 抛出的错误将包含一个带有错误 ID 和相关信息的 URL。该 URL 会将指向文档中的一个页面,在该页面上重新组合了原始错误消息。
同年,React 通过新的会议(例如 React Europe)获得了更多的认可。MobX 和 BlueprintJS 等新库的发布受到了开发社区的高度赞赏。
React 2017年改进之年(React Fiber 发布)
React v16.0 于 2017 年 9 月发布,其中包含多项更改和新功能,其中包括:
- 通过引入 Error Boundaries 改进了错误处理,Error Boundaries 是特殊的 React 组件,提供了一种干净的方式来处理其子组件中的错误,记录这些错误并在其位置显示回退 UI。
- 允许从组件的渲染方法返回多个元素,例如数组和字符串。
- 改进了服务端渲染,比 React 15 快大约三倍。
- 推出全新的 React Fiber 架构,一套新的内部渲染算法。React Fiber 成为 React 工具库未来任何改进和功能开发的基础。
React 2018年React v16.3.0 发布
2018-趋于稳定3月1日-2日:ReactCONF冰岛大会,DanAbramov发表超越React16演讲3月29日:React16.3.0发布时至今日,React最新版本为16.13.1,仍在16的大版本中。
React 2019年React Hooks 发布
React v16.8 于 2019 年 2 月发布,正式推出 React Hooks,Hooks 让我们无需编写类就可以使用状态和其他 React 特性。还可以构建自己的 Hooks以在组件之间共享可重用的有状态逻辑。
import React, { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
You clicked {count} times
);
}
同年,React 团队推出了全新的React DevTools,其可以在 Chrome、Firefox 和 (Chromium) Edge 中使用!此版本发生了很多变化!提供了显着的性能提升和改进的导航体验。它还为 React Hooks 提供全面支持,包括检查嵌套对象。
React 2020年更新更简单
React v17.0 于 2020 年 10 月发布,距离上一个主要版本已经过去了两年半的时间。此版本主要侧重于使用以前的版本更新 React 本身变得更简单,不包含任何面向开发人员的新功能。在此版本之前,从 React 的早期版本升级到新版本需要一次升级整个应用。React 17 提供了一次升级整个应用或按认为合适的方式逐个升级应用的选项。
同年,React 引入了 零捆绑大小的 React 服务端组件,以获取 React 开发社区的初步反馈。
React 2021年计划React v18
3 月1 - 2 日,Dan Abramov 做了 Beyond React16 的演讲。3 月 29 日,React v16.3.0 发布
React团队很高兴能分享一些更新:
- 我们已经开始制作React 18版本,这将是我们的下一个主要版本。
- 我们创建了一个工作组,为社区逐步采用React 18中的新功能做好准备。
- 我们已经发布了React 18 Alpha,以便图书馆作者可以尝试并提供反馈。
发布后,React 18将包括开箱即用的改进(如自动批处理)、新的API(如startTransition)和内置支持React.lazy的新流媒体服务器渲染器。
由于我们在React 18中添加了一个新的选择加入机制,这些功能成为可能。它被称为“并发渲染”,它允许React同时准备多个版本的UI。这一变化大多是在幕后进行的,但它释放了新的可能性,可以提高应用程序的真实性能和感知性能。
如果你一直在关注我们对React未来的研究(我们不希望你这样做!),你可能听说过一种名为“并发模式”的东西,或者它可能会破坏你的应用程序。为了回应社区的反馈,我们重新设计了升级策略,以便逐步采用。只有由其中一个新功能触发的更新才会启用并发渲染,而不是全有或全无的“模式”。在实践中,这意味着你将能够在不重写的情况下采用React 18,并按照自己的节奏尝试新功能。
React 2022年React v18.0 正式发布
React v18.0 于 2022 年 3 月发布,这个主要版本包括开箱即用的改进,例如自动批处理、新 API(例如 startTransition)以及支持 Suspense 的流式服务端渲染。React 18 中的许多功能都建立在新的并发渲染器之上,这是一个解锁强大新功能的幕后变化。
2022 年 6 月,React Labs 公布正在研究的方向:
- React Server Components (RSC)
- 优化资源加载
- 静态服务端渲染优化
- React 优化编译器
- 离屏渲染
- 过渡跟踪
- 新的 React 文档
React 2023年至今持续改进
2023 年 5 月,React 推出一个新的官方支持的 Canary 发布渠道。它让诸如框架之类的精心策划的设置将个别 React 功能的采用与 React 发布计划分离开来。让开发者在设计接近最终版本时立即采用个别新功能,然后再以稳定版本发布——类似于 Meta 长期以来在内部使用新版本的 React 的方式。
详细请见:React Canary 正式发布
React 未来
React发展之路已经越走越好,但我们依然需要更多学习React。距离 React 上一次版本更新(最新版本为 v18.2)已经过去了近一年。React v19.0 还在开发中(当前进度 45%),期待更多实用的功能出现在 React 中!
最后
一台电脑,一个键盘,尽情挥洒智慧的人生;几行数字,几个字母,认真编写生活的美好;
一 个灵感,一段程序,推动科技进步,促进社会发展。
创作不易,喜欢的老铁们加个关注,点个赞,打个赏,后面会不定期更新干货和技术相关的资讯,速速收藏,谢谢!你们的一个小小举动就是对小编的认可,更是创作的动力。