都 2024 年了,该如何搭建新的 React 项目?

在前端技术日新月异的今天,React 社区已经不再将 create-react-app 作为创建新项目的首选工具,而是推荐使用社区中流行的由 React 驱动的框架来创建新项目。本文就来探讨在 2024 年创建 React 项目的方式及其优缺点!

Create React App 有什么问题?

Create React App(CRA)于 2016 年 7 月首次发布,是一个方便快捷的 React 项目搭建工具。尽管在 React 社区中广受欢迎,但也有一些限制和缺点需要考虑。

  • 配置选项有限: Create React App 的配置选项有限。由于该工具对构建过程进行了高度抽象,定制 Webpack 和 Babel 配置相对困难。在某些情况下,开发人员可能需要进行一些自定义操作,这就意味着他们可能需要从 CRA 分离出来,自行管理配置和依赖关系。然而,这种分离可能会导致未来的更新和维护变得更为复杂。
  • 复杂的依赖关系: Create React App 附带了一组预定义的依赖项,包括 Webpack、Babel 和 ESLint。虽然这消除了手动配置这些工具的麻烦,但也意味着开发人员需要自行管理和更新这些依赖项。
  • 构建资源的大小: Create React App 的默认配置优先考虑的是开发速度,而不是生成的包大小或应用的初始加载时间。因此,生成的包可能比实际需要的大,从而影响应用的初始加载时间。

Create React App 的最新版本是 2022 年 4 月 12 日的 v5.0.1,但在 2023 年 3 月 16 日,React 团队在文档网站上正式宣布停止将不再积极维护 Create React App。

Vite

Vite 无疑是 create-react-app(CRA)的绝佳替代品。与 CRA(使用 Webpack)相比,Vite 因其底层使用 esbuild 而具有显著的性能优势。

图片

Vite 更倾向于创建采用客户端渲染的单页应用(SPA),而不是服务端渲染(SSR)。不过,随着服务端渲染(SSR)日益受到重视,Vite 也提供了这一功能作为可选特性。

图片

从 create-react-app(CRA)迁移到Vite非常简单。通过 Vite 的 vite.config.js 文件,以及特定功能的文件(例如tsconfig),只需进行少量配置即可启用 TypeScript、SVG 和 SSR 等选择性功能。

图片

Vite 与 React 的结合,让开发人员能够在无固定框架限制的情况下,自由地使用 React。开发者可以根据项目需求选择适合自己的 React 辅助库,如路由、数据获取、状态管理及测试工具。与其他 React 框架不同,Vite 不会在项目层面强制使用任何特定的 React 功能、库或配置,从而赋予了开发者更多的灵活性和自主权。

最后,但同样重要的是,Vite 使得初学者能够更专注于学习 React 的基础,而不会被框架的复杂性所干扰。相比之下,在某些框架中学习 React 时,React 可能会被置于次要地位,学习者需要遵循框架的特定规则和观点(例如基于文件的路由)。这种框架导向的方法可能会使 React 的核心概念变得模糊,而 Vite 提供的无框架环境则让学习者能够更深入地理解 React 的本质。

React + Vite 的优势:

  • 高效替代:Vite能够直接替代create-react-app(CRA),为开发者提供更快速和流畅的开发生态系统。
  • 灵活性:Vite不仅支持单页面应用/客户端渲染,而且允许开发者选择是否启用服务器端渲染(SSR)。
  • 框架独立:Vite不绑定任何特定的框架或公司,使开发者能够自由选择最适合项目需求的工具和库。
  • 轻量级:Vite的轻量级特性使其成为高效开发的理想选择,不会引入不必要的复杂性。
  • 专注于React:Vite的设计理念是避免在功能层面对React产生干扰,从而让开发者能够专注于React本身,而不是框架的限制。
  • 平缓的学习曲线:由于Vite简化了开发流程,它可以帮助初学者更轻松地了解React的基础知识,而无需陷入复杂的框架体系。
  • 广泛应用:Vite 不仅适用于 React 项目,还被广泛应用于其他许多前端框架。

React + Vite 的缺点:

  • 优先考虑SPA:Vite 主要针对单页面应用/客户端渲染进行优化,这可能不适合所有类型的项目需求。
  • 缺乏框架支持:与某些框架结合使用时,Vite可能不会提供与特定框架完全集成的所有优势和特性。
  • 对集成框架特性的限制:由于 Vite 的设计理念,它可能无法充分利用某些与集成框架相关的特性,如 React Server Components (RSC)。

Next.js

作为成熟度很高的 React 框架,Next.js 无疑是 React 开发人员的首选。当开发者希望在一个具有明确观点的框架环境中使用 React 时,Next.js凭借其内置的众多功能,能够提供卓越的支持。然而,如果你对Next.js并不满意,不妨考虑一下Remix。Remix同样为React开发提供了强大的支持,并且在某些方面可能更适合你的项目需求。

图片

Next.js 将服务端渲染(SSR)作为其主要的渲染技术,但同时也支持静态站点生成(SSG)和客户端渲染(CSR,类似于使用 Vite 的 React 项目)。此外,Next.js 还支持一些更先进的渲染技术,如增量静态再生(ISR)和React服务器组件(RSC)。

Next.js 还允许在单个应用中混合使用不同的渲染技术。例如,可以选择使用 SSG 为营销页面提供静态内容,同时在用户完成注册和登录后,使用 SSR 技术渲染实际的应用界面。

然而,这种强大的功能也带来了一定的挑战和成本。不同的渲染技术可能会增加工程的复杂性和负担。此外,随着框架不断发展,开发人员就需要不断更新自己的技能和理解,以跟上技术发展的步伐。

图片

总而言之,Next.js凭借其丰富的内置功能(如基于文件的路由)为React开发提供了强大的支持。然而,与此同时,这些功能也伴随着一定的责任和复杂性。尽管React本身(如与Vite结合使用)相对稳定,但在Next.js生态系统中,你将不断看到技术的前沿进展和创新。Next.js 致力于将 React 引入服务端,推动 React 技术的发展并引领行业趋势。

Next.js 的优势:

  • 内置库与明确观点:Next.js 提供了丰富的内置库和工具,为开发者提供了明确和一致的开发观点,降低了开发难度。
  • 多样的渲染技术:Next.js 支持服务器端渲染(SSR)和多种其他渲染技术,这有助于提高应用的性能和SEO效果。
  • 性能优化:如果使用得当,Next.js 可以显著提高应用性能。
  • SEO优势:由于其强大的SSR支持,Next.js 在SEO方面表现优秀,确保了良好的搜索引擎可见性。
  • 强大的后盾:Vercel 作为一家实力雄厚的企业,为Next.js的发展提供了坚实的后盾,确保了项目的持续更新和支持。
  • 前沿技术投入:Next.js 始终关注并采用前端领域的最新技术,确保始终处于技术前沿。

Next.js 的缺点:

  • 对前沿技术的依赖:Next.js 过于关注前沿技术,这可能导致一些开发者在跟进和学习上感到困难。
  • 相对于纯React或Vite的开销:与仅使用React或Vite相比,使用Next.js可能会增加开发、部署和维护的开销。
  • 学习难度大:Next.js 功能强大但学习曲线较陡峭,需要开发者投入更多的时间和精力去学习和掌握。
  • 框架限制:Next.js 作为框架,对开发方式有一定的限制,可能影响开发者的创新和灵活性。

Remix

Remix 是一个全栈框架,重新定义了 UI,并极大地提升了网络性能、速度和用户体验。通过集成诸如 esbuild、React Router、服务器端渲染、生产服务器和后端优化等前沿工具和技术,Remix 满足了各种 Web 开发需求。

Remix 的优势体现在以下几个方面:

  • 高效的代码编译:Remix采用esbuild这一快速JavaScript/CSS打包器和压缩器进行编译,确保了闪电般的加载时间和最佳的代码效率。
  • 卓越的性能优化:在服务器端采用渐进增强技术,只向浏览器发送必要的JavaScript、JSON和CSS内容,显著提升了性能并减少了带宽占用。
  • 智能渲染与数据管理:利用动态服务器端渲染技术,为用户提供无缝和交互式的体验。其智能设计能够自动重新获取变异数据,Remix 能够无缝管理整个工作流程。
  • 端到端的解决方案:Remix提供了一套完整的解决方案,包括React Router、服务器端渲染、生产服务器和后端优化等,为开发者提供了极大的便利。

React 团队认为 Remix 是一个具有嵌套路由功能的领先全栈 React 框架,能够轻松打造出具有出色用户体验和卓越性能的动态网站。

Astro

Astro 允许开发人员创建以内容为重点的网站。由于其岛屿架构和选择性水合作用,它默认情况下使每个网站都具有快速性能。因此,对于需要SEO的网站来说,使用 Astro 是非常有益的。

图片

从实现角度看,Astro 更加倾向于多页面应用(MPA)的概念,而不是单页面应用(SPA)。这一选择闭合了应用类型的历史循环,从多页面应用的主导地位(2010年以前),到单页面应用的崛起(2010年至2020年),再到现在的回归多页面应用。这一转变首次将多页面应用作为一个明确的术语。

Astro 是一个与框架无关的解决方案。这意味着既可以使用Astro自带的组件语法,也可以选择与熟悉的框架(如React)进行集成。尽管如此,Astro 仅用于服务器端渲染,并不会暴露给客户端。只有当你决定将交互式岛屿模块水合到客户端时,才会将所有必要的JavaScript代码传输到浏览器中。

图片

Gatsby

Gatsby 是一个基于 React 的开源框架,具备卓越的性能、可扩展性和安全性。其最大的亮点在于与知名部署平台 Netlify 的无缝集成,这使得开发人员在整个项目周期内都能高效地工作。Gatsby 与 Netlify 的结合带来了惊人的构建和部署速度,比传统方法快达 1000 倍。

Gatsby 的另一大特点是其丰富的插件生态系统。通过这些插件,开发人员可以轻松集成各种内容源、API 和服务,实现单个网站的多元化内容展示。借助 Gatsby 的 GraphQL 数据层,数据管理变得集中且高效。此外,Gatsby 还支持服务端渲染,即预渲染页面时使用用户访问时获取的数据。

React 团队对 Gatsby 给予了高度评价,认为它是静态内容导向型网站的绝佳选择。这一认可进一步突显了 Gatsby 在提供动态和吸引人的静态内容方面的优势。通过使用 Gatsby,开发人员能够快速构建高性能的网站,实现服务的无缝集成、高效的数据管理以及更快的开发与部署流程。

其他

当然,除了上面说的方式,还有很多创建 React 项目的方式:

  • 使用 Parcel 而不是 Vite:Vite是一个快速的现代构建工具,但如果想尝试一些不同的构建选项,可以考虑使用Parcel。Parcel是一个零配置的构建工具,具有出色的性能和开发者友好的使用体验。
  • 使用 Monorepo 设置(如Turborepo):如果项目需要管理多个相关的子项目,同时使用不同的前端框架,那么Monorepo设置是一个不错的选择。Turborepo是一个Monorepo管理工具,可以方便地在项目中集成 Next.js 和 Astro 等框架。
  • 使用 create-t3-app 进行tRPC开发:如果 React 项目需要与后端进行通信,并且希望使用 tRPC 轻松创建类型安全的 API 调用,那么 create-t3-app 是一个不错的工具。它为React项目提供了 tRPC 的集成支持,使得开发和维护API调用变得更加简单和高效。
  • 使用 React Native + Expo 来开发移动应用:如果需要开发跨平台的移动应用,React Native 是一个强大的选择。结合 Expo 开发工具,可以更快地构建和迭代原生移动应用,并享受丰富的开发生态系统和强大的跨平台支持。
  • 使用 Tauri 或 Electron 来开发桌面应用:如果需要开发桌面应用,可以考虑使用 Tauri 或 Electron。Tauri 是一个基于 Rust 、最小化、快速和安全的桌面应用开发工具,而 Electron 则是一个广泛使用的开发工具,具有强大的跨平台支持和丰富的功能库。

小结

要搭建一个 React 项目,首先需要确定项目需求和目标。根据不同的需求,可以选择适合的框架和解决方案。以下是一些建议:

  • Vite: 如果刚开始学习React,并希望尽可能贴近 React 的基础知识,可以选择使用 Vite。Vite 提供了一种快速开发和构建应用的方法,与React一起使用可以让你更好地理解 React 的核心概念和开发流程。
  • Next.js: 如果正在寻找一个基于 React 的具有多种渲染技术(和基础架构)的框架,可以考虑使用 Next.js。Next.js 是一个流行的 React 框架,提供了服务端渲染(SSR)和客户端渲染(CSR)两种渲染方式,以及许多其他功能和工具,可以帮助你快速构建强大的应用。
  • Remix: 如果 Next.js 不符合你的需求,并且需要一个集成了所有服务端渲染(SSR)功能的框架,可以尝试使用 Remix。Remix 是一个新兴的 React 框架,专注于提供最佳的服务端渲染和开发体验。它具有许多先进的特性和工具,可以帮助你快速构建高质量的 React 应用。
  • Gatsby 和 Astro: 如果想创建一个以内容为重点的网站,可以尝试使用 Gatsby 或 Astro。Astro 是一个轻量级的框架,专门用于构建静态网站和博客。它与 React 一起使用可以轻松地创建动态和交互式的网站,同时保持性能和可扩展性。Gatsby 也是一个非常流行的 React 框架,专门用于构建静态网站和博客。它提供了许多强大的特性和工具,可以帮助你快速构建高质量的 React 应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vivado 定义和配置I/O端口、

定义和配置I/O端口 您可以使用Vivado IDE导入、创建和配置I/O端口,如中所述以下部分。 导入I/O端口 根据项目类型,可以使用以下方法导入I/O端口: •I/O规划项目:您可以将XDC和CSV文件导入空的I/O规划项目当您使用文件导入功能…

Apache Shiro 安全框架

前言 Apache Shiro 是一个强大且容易使用的Java安全矿建,执行身份验证,授权,密码和会话管理。使用Shiro的易于理解的API您可以快速轻松的获得任何应用程序直到大的项目。 一丶什么是Shiro 1.Shiro是什么 Apache Shiro是一个强大且易于使用…

mysql高可用设计,主库挂了怎么办

实际上高可用就是系统能提供的一种无故障服务能力,就是避免宕机出现不能服务的场景。 首先来说对于无状态服务的高可用设计是比较简单的,发现有不能用的就直接停了换别的服务器就行,比如Nginx。这里说一下无状态服务就是不需要记录你的状态、…

防御保护---NAT实验

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一. 练习 PC4配置 FW2配置 sys int g0/0/0 ip add 192.168.100.3 24 service-manage all permit sys int l0 ip add 1.1.1.1 24 int g0/0/0 ip add 12.0.0.1 24 int g0/0/2 ip add 21.0.0.1 …

zuul网关

zuul网关 zuul自定义过滤器hystrix和ribbon时间RibbonAutoConfiguration自动配置FeignAutoConfiguration自动配置RibbonEurekaAutoConfigurationSendErrorFilter过滤器EnableZuulServerHasFeatures EnableZuulProxy zuul自定义过滤器 继承ZuulFilter类,实现其方法f…

Linux/Uinx 系统编程:进程管理(1)

Linux/Uinx 系统编程:进程管理(1) 文章目录 Linux/Uinx 系统编程:进程管理(1)什么是进程进程来源INIT 和 守护进程登录进程sh进程进程的执行模式进程管理的系统调用关于syscall中参数b,c&#x…

谷歌出品!读懂 QUIC 协议:更快、更高效的通信协议

QUIC结构 QUIC协议模型如下图所示,其放弃了TCP∕IP网络中使用五元组(源IP,源端口,目的IP,目的端口,协议标识符)来唯一标识一条连接的方式,而使用一个全局唯一的随机生成的ID(即Connection ID) 来标识一条连接。 由低向上分层讨论QUIC协议: •UDP层:在U…

MongoDB莫名崩溃的问题定位与解决纪实

MongoDB莫名崩溃的问题定位与解决纪实 国庆之前发布的软件版本一直运行正常,国庆之后,测试同事跑自动化测试脚本,发现该软件频繁异常,通过查看log发现,该软件使用的MongoDB崩溃了。 该软件是个Windows的桌面软件&…

【QT+QGIS跨平台编译】之十二:【libpng+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文件目录 一、libpng介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libpng介绍 PNG(Portable Network Graphics,便携式网络图形),是一种采用无损压缩算法的位图格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。 PNG使用从LZ77派生的无损数据压缩算…

Java类加载器

什么是类加载器? 1.1类加载器 作用 负责将.class文件(存储的物理文件)加载在到内存中 需要有个人把我们写的java文件编译后的字节码文件搬运到虚拟机上 1.2类加载的完整过程 1.2类加载的完整过程 类加载时机 简单理解:字节码文件什么时候…

网络协议与攻击模拟_09部署DHCP服务器

一、部署DHCP服务器 Windows server部署DHCP服务器 1、虚拟机网络架构理解 Vmware里面不同的虚拟机可以设置相同的Vmnet网络,也可以设置不同的Vmnet网络。两台虚拟机设置相同的Vmnet1网卡,可以看作为使用虚拟交换机将两台Vmnet1的虚拟机连接起来的。 …

java学习之路(1)-隐藏桌面图标从CMD命令中打开软件

1.找到文件所在路径: 2.将文件路径添加到环境变量中 3.winr 打开cmd 输入命令(目录后面的QQScLauncher.exe) 直接可以打开QQ软件,删除桌面图标,别人就找不到了,只能通过cmd命令或者是找到安装包所在位置 …

微服务入门篇:Eureka注册中心(作用,搭建Eureka客户端和服务端)

目录 1.提供者与消费者2.Eureka的作用3.搭建EurekaServer1.配置服务端2.配置客户端3.复制实例操作4.服务拉取 1.提供者与消费者 ①服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务) ②服务消费者:一次业务中,调用其它微…

docker的资源限制(cgroup)

前瞻 Docker 通过 Cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面, 基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 ControlGroups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 CPU、…

雪亮工程视频智能监控方案,助力打造全方位、多层次视频监管体系

随着科技的不断发展,视频监控已经成为城市安全防范的重要手段之一。为了提高城市安全防范水平,各地纷纷开展“雪亮工程”,即利用视频智能监控技术,实现对城市各个角落的全方位、全天候监控。本文将介绍一种雪亮工程视频智能监控方…

Shell脚本⑤函数与数组

一.函数 封装的可重复利用的具有特定功能的代码 格式: 方法一: [function] 函数名 (){ 命令序列 [return x] #使用return或者exit可以显式的结束函数 } 方法二: 函数名(){ 命令序列 } 1.函数的调用方法 (1&…

Tensorflow2.0笔记 - tensor排序操作

本笔记主要记录sort,argsort,以及top_k操作,加上一个求Top K准确度的例子。 import tensorflow as tf import numpy as nptf.__version__#sort,argsort#对1维的tensor进行排序 tensor tf.random.shuffle(tf.range(10)) print(tensor) #升序 print("tf.sort(d…

纯血鸿蒙来了,企业开发者应该关注什么

2024年对于鸿蒙来说是一个里程碑,鸿蒙将正式对外发布 HarmonyOS NEXT 5.0,而此前传言的系统将不再对开发者层面兼容Android等消息将成为定论。 为什么鸿蒙能有这个底气?因为研究机构TechInsights发布预测报告称,华为HarmonyOS将在…

【Chrome】浏览器怎么清除缓存并强制刷新

文章目录 1、正常刷新:正常刷新网页,网页有缓存则采用缓存。 F5 或 刷新键2、强制刷新:忽略缓存刷新,重新下载资源不用缓存。 CtrlF5 或 ShiftF5 或 CtrlShiftR3、在浏览器的设置里面清除所有数据

基于 Docker 搭建 Uptime-Kuma 一个极简风的应用监控

GitHub:https://github.com/louislam/uptime-kuma 一、uptime-kuma 介绍 Demo:https://uptime.wuhanjiayou.cn/ uptime-kuma 是一款开源的监控工具, 支持 TCP / PING / HTTP 等多种监控方式,可监测网站,数据库,Docker…