返回顶部
首页 > 资讯 > 前端开发 > 其他 >React为什么不将Vite作为构建应用的首选
  • 188
分享到

React为什么不将Vite作为构建应用的首选

React.jsVite前端 2023-05-14 21:05:01 188人浏览 独家记忆
摘要

React为什么不将Vite作为构建应用的首选?下面本篇文章就来带大家聊聊React不将Vite作为默认推荐的原因,希望对大家有所帮助!在React文档中,对于构建新的React应用,首推的方式是CRA(create-react-app)。

React为什么不将Vite作为构建应用的首选?下面本篇文章就来带大家聊聊React不将Vite作为默认推荐的原因,希望对大家有所帮助!

React为什么不将Vite作为构建应用的首选

React文档中,对于构建新的React应用,首推的方式是CRA(create-react-app)。

CRA推出于2016年,彼时还没有成体系的React脚手架工具供大家使用,再加上这是官方工具,一经推出就受到了欢迎。截止当前,CRA仓库已经收获快10wstar

但是,随着时间的推移,出现了很多优秀的替代品,比如parcelvite提供的React模版。

CRA本身的进步速度却在放缓,其上一次提交要追溯到去年9月8日:

此外,CRA对一些流行工具的支持也不是很好,比如在TailwindCSS文档中就不推荐使用CRA

近日,油管10w粉丝的前端网红Theo就在React文档仓库发起了一个PR,号召React文档不要再默认推荐CRA,而是应该将Vite作为构建应用的首选。【相关推荐:Redis视频教程编程视频】

看这围观群众的数量就知道大家对这种敏感问题有多关心了:

那么,React团队是如何看待这个问题的呢?他们会将Vite作为构建应用的首选项么?

本文来聊聊DanReact核心成员)对这一问题的看法。

欢迎加入人类高质量前端交流群,带飞

CRA的定位

既然众矢之的是CRA,那么首先我们需要明白CRAReact体系下的定位,再来看看Vite能否在这个定位下取代前者。

CRA诞生的时期(2016年),是SPA(单页应用)最火热的时期。在当时,他很好的解决了两个痛点:

0配置初始化项目

这点不用过多介绍,执行如下命令后就能生成一个CSR(客户端渲染)的React项目:

npx create-react-app 项目名复制代码

集成工具链

CRA将当时的一些工程化最佳实践都封装在react-scripts包下,并抹平这些工具不兼容的地方。

开发者既享受了开箱即用的最佳实践,又不用担心某些工具升级后对项目造成的影响(CRA会处理)。

后来的很多优秀脚手架工具(比如ViteParcel),也都沿用了这种开箱即用的理念。

除了以上两点,随着CRA的走红,React团队还将他作为新特性的快速分发渠道,比如:

  • Fast Refresh(针对React的热更新,不会丢失组件状态)

  • Hooks推出后的一系列lint规则

依托CRA庞大的装机量与使用量,这些集成到CRA的特性可以快速部署到开发者的项目中,达到快速提高普及率的目的。

试想,如果没有CRA的推动,Hookslint规则很难在开发者中有这么高普及率,Hooks的理念也就不会这么快席卷整个前端框架领域。

从以上三点来看,Vite完全可以成为比CRA性能更优的替代品。

但是,React团队的考量不仅如此。

脚手架工具的不足

虽然CRA开箱即用,但他提供的能力并不全面,比如他并不提供:

  • 状态管理方案

  • 路由方案

  • 数据请求方案

为什么不提供呢?因为在CRA发展的时期,这些方案还未形成最佳实践。

随着时间发展,开发者逐渐摸索出解决这些问题的最佳实践。比如请求瀑布问题,考虑如下组件:

function App() {  const [data, update] = useState(null);  useEffect(() => {    fetch('Http://...').then(res => update(res.JSON()))
  }, [])  
  return <Child data={data}/>}复制代码

只有当App组件渲染后才能开始请求数据,这个请求时机是比较滞后的,如果Child依赖data来请求自己的数据,那么由于App请求的滞后导致Child的请求也滞后了,这就是请求瀑布问题。

这个问题常见的解决方法是 —— 将请求数据的逻辑收敛到路由方案中。

再比如,随着业务不断迭代,业务代码体积越来越大,常见的优化手段是懒加载组件。

但是,手动执行懒加载常常会产生意料之外的问题。比如,页面中有个图表组件<Chart/>,如果开发者懒加载了这个组件,但是该组件在on mount时请求数据,这又会陷入请求瀑布问题。

要彻底解决这个问题,需要配合3类技术方案:

  • 数据请求方案(解决数据流向问题)

  • 路由方案(解决数据请求时机问题)

  • 打包方案(解决懒加载的实现问题)

类似的问题还有很多,比如CSR首屏渲染速度慢的问题(需要通过SSR解决)。

可见,CRA仅仅提供了CSR环境下一个开箱即用的模版,但是随着项目变得越来越复杂,一些业务细节问题CRA是没有提供开箱即用的解决方案的。

从这个角度看,即使切换到Vite还是会面临同样的问题。

新时代的框架

随着各种常见问题的最佳实践被探索出来,逐渐诞生了一些以React为基础,集成各种业务问题最佳实践的框架,比如Next.jsRemix

其中,Remix就是以React-Router(路由解决方案)为基础,逐渐发展出来的囊括路由、数据请求、渲染为一体的全栈框架。

那么,能否将CRA迭代为类似Next.jsRemix这样的全栈框架,一劳永逸解决CRA对各种最佳实践的缺失呢?

React团队认为,这样做需要极高的开发成本,而且随着时代发展,总会出现更多CRA不支持的最佳实践(就像他当前面临的问题一样),那么CRA终有一天会被再度淘汰。

所以,这个方案不可取。

既然这个方案不可取,那么用Vite取代CRA的方案也不可取。因为单纯使用Vite并没有解决最佳实践的缺失,必须在此基础上实现那些最佳实践(比如路由、数据请求...),那又回到了开发一个全栈框架

最终,React团队更倾向如下解决方案:将CRA作为一个脚手架工具,启动后会根据用户的不同场景需要(比如是SSR还是CSR)推荐不同的框架,再将CRA作为不使用框架情况下的兜底方案

并且,在实现上,可能将兜底方案中的webpack切换为Vite

总结

React团队的思考可以发现,React始终将自己定位为一个状态驱动UI的库。

随着时代的发展,单独使用这个库已经不能满足日常开发需要,基于底层使用React + 实现各种最佳实践模式的框架会越来越流行。

最近,Next.js达到了10wstar成就,成为GitHubstar排名第14的仓库,间接印证了这种趋势。

回到开篇的问题:React为什么不将Vite作为默认推荐?

如果是用Vite取代WEBpack作为CRA的打包工具,未来可能会。但是,这不是最首要的问题。

如何协助上层的框架更好的服务开发者,才是React团队首要考虑的问题。

React不死,他只会逐渐移居幕后。

【推荐学习javascript视频教程】

以上就是React为什么不将Vite作为构建应用的首选的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: React为什么不将Vite作为构建应用的首选

本文链接: https://lsjlt.com/news/206973.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • React为什么不将Vite作为构建应用的首选
    React为什么不将Vite作为构建应用的首选?下面本篇文章就来带大家聊聊React不将Vite作为默认推荐的原因,希望对大家有所帮助!在React文档中,对于构建新的React应用,首推的方式是CRA(create-react-app)。...
    99+
    2023-05-14
    React.js Vite 前端
  • React不将Vite作为构建应用的首选原因是什么
    这篇文章主要介绍“React不将Vite作为构建应用的首选原因是什么”,在日常操作中,相信很多人在React不将Vite作为构建应用的首选原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React不将...
    99+
    2023-07-05
  • 为什么选择PHP作为Web开发的首选语言
    为什么选择PHP作为Web开发的首选语言 在当今的互联网时代,Web开发已经成为了一个非常重要的领域。而选择一种合适的编程语言对于开发者来说至关重要。在众多的编程语言中,PHP作为一种...
    99+
    2024-04-02
  • react为什么不推荐使用index作为key
    1.旧的虚拟dom和新的虚拟dom对比,首先看他们的key是否相同 2.相同继续对比他们的内容,不同生成新的真实dom进行替换 3.如果内容和key都相同,复用旧的真实dom 不做改...
    99+
    2024-04-02
  • 为什么不首选32位版本的mongodb
    不首选32位版本mongodb的原因是:mongodb是使用内存映射文件的,在运行32位版本的mongodb时,服务器的总存储大小为2GB,而使用64位版本的mongodb构建时,实际上提供了无限的存储大小。具体内容如下:搜索相关资料是看到...
    99+
    2024-04-02
  • 为什么Spring是Web应用程序开发的首选框架?
    Spring是当今最流行的Java开发框架之一,尤其在Web应用程序开发中,Spring已经成为了首选框架。那么为什么Spring如此受欢迎呢?本文将详细介绍Spring框架的优点,并通过演示代码来阐述其强大的特性。 一、Spring框架的...
    99+
    2023-09-02
    leetcode spring 响应
  • 你为什么应该考虑Python和Django作为实时大数据处理的首选技术?
    Python和Django已经成为实时大数据处理的首选技术。这两种技术不仅方便易用,而且能够处理大量数据并实时更新结果。在本文中,我们将探讨为什么Python和Django是实时大数据处理的首选技术,并提供一些代码示例。 Python是一种...
    99+
    2023-08-14
    django 实时 大数据
  • 为什么MySQL不建议使用NULL作为列默认值?
    1 前言 NULL值是一种对列的特殊约束,我们创建一个新列时,如果没有明确的使用关键字not null声明该数据列,Mysql会默认的为我们添加上NULL约束. 有些开发人员在创建数据表时,由于懒惰直...
    99+
    2023-09-10
    mysql 数据库
  • 为什么不建议使用Java自定义Object作为HashMap的key
    目录前言踩坑历程回顾hashCode覆写的讲究为什么hashCode和equals要同时覆写数据退出机制的兜底总结前言 此前部门内的一个线上系统上线后内存一路飙高、一段时间后直接占满...
    99+
    2024-04-02
  • 为什么vue中不建议使用空字符串作为className
    目录比较空字符串''和null情况1:使用空字符串''情况2:使用null情况3:使用undefined使用对象的形式绑定class使用 &&绑定class案例1:i...
    99+
    2024-04-02
  • 为什么PHP和Spring是构建高性能HTTP应用程序的理想选择?
    PHP和Spring都是非常流行的Web应用程序开发框架。它们都提供了一些功能和特性,可以帮助开发人员构建高性能HTTP应用程序。在本篇文章中,我们将探讨为什么PHP和Spring是构建高性能HTTP应用程序的理想选择,并且会穿插一些演示代...
    99+
    2023-11-10
    http apache spring
  • 美团面试:为什么MySQL不建议使用NULL作为列默认值?
    今天给大家分享一道美团高频面试题,“为什么 MySQL 不建议使用 NULL 作为列默认值?”。 对于这个问题,通常能听到的答案是 使用了 NULL 值的列将会使索引失效,但是如果实际测试过一下,你就...
    99+
    2023-09-11
    面试 mysql adb
  • 为什么Unix系统是分布式计算的首选操作系统之一?
    Unix系统是分布式计算的首选操作系统之一,这并不是一句空话。在本文中,我们将深入探讨Unix系统作为分布式计算平台的优势,并分析为什么Unix系统能够成为分布式计算领域的佼佼者。 Unix系统的可扩展性 Unix系统是一个高度可扩展的...
    99+
    2023-09-10
    unix 分布式 javascript
  • 为什么 PHP 索引是许多开发者的首选,而不是 Django 或 JavaScript?
    随着互联网的迅速发展,越来越多的程序员开始涉足 Web 开发领域。在这个领域中,PHP、Django 和 JavaScript 都是非常流行的编程语言。然而,许多开发者认为 PHP 索引是他们的首选,而不是 Django 或 JavaSc...
    99+
    2023-08-04
    索引 django javascript
  • 为什么Java、Shell和NPM是构建Web应用程序的完美组合?
    在当今的Web应用程序开发中,Java、Shell和NPM已经成为了一组完美的组合。这三种技术的结合能够提供强大的开发和管理工具,使得Web应用程序的开发过程更加高效、可靠和灵活。本文将详细探讨为什么这三种技术是构建Web应用程序的完美组合...
    99+
    2023-11-12
    shell npm http
  • 分布式实时 API 架构的决策:为什么选择 Go 语言作为主要工具?
    随着互联网技术的迅猛发展,分布式实时 API 架构已经成为了许多企业的必备技术。为了能够更好地应对高并发、高可用等挑战,选择一门高效、可靠的语言来开发分布式实时 API 是至关重要的。在这篇文章中,我们将探讨为什么选择 Go 语言作为主要...
    99+
    2023-11-05
    分布式 api 实时
  • 为什么PHP和MySQL是现代网站建设的不二选择?
    标题:为什么PHP和MySQL是现代网站建设的不二选择? 随着互联网的迅速发展,网站建设变得越来越重要。在众多的网站开发技术中,PHP和MySQL作为经典的组合,一直被业界广泛应用。本...
    99+
    2024-03-02
    mysql php 现代
  • 为什么使用Go和Bash来构建数组框架是一个聪明的选择?
    在现代软件开发中,数组框架是一种非常常见的工具。它们被用于许多不同的应用程序中,包括图形用户界面、数据库、网络应用程序、游戏等等。由于其广泛的应用,开发人员一直在寻找最好的方式来构建数组框架,以便更快、更简单地完成任务。在本文中,我们将探...
    99+
    2023-11-05
    bash 数组 框架
  • Angular中innerHTML标签的样式为什么不起作用
    小编给大家分享一下Angular中innerHTML标签的样式为什么不起作用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.背...
    99+
    2024-04-02
  • 为什么PHP容器和Django索引是构建Web应用程序的完美组合?
    随着互联网技术的不断发展,Web应用程序的开发变得越来越普遍。PHP容器和Django索引成为了构建Web应用程序的完美组合。本文将介绍为什么PHP容器和Django索引是构建Web应用程序的完美组合,并且通过演示代码来说明。 首先,让我们...
    99+
    2023-08-06
    容器 django 索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作