2024 年高效开发的 React 生态系统

news2024/11/25 11:55:27

要使用 React 制作应用程序,需要熟悉正确的库来添加您需要的功能。例如,要添加某个功能(例如身份验证或样式),您需要找到一个好的第三方库来处理它。

在这份综合指南中,我将向您展示我建议您在 2024 年使用的所有库,以轻松构建快速、可靠的 React 应用程序。

🛠️ React 框架

首先,我们如何在 2024 年创建我们的 React 应用程序?

如果你想要一个客户端渲染的 React 项目,你最好的选择是 Vite,它取代了已弃用的 Create React App 工具。

如果您有兴趣构建服务器渲染或全栈 React 项目,Next.js 是最完整、最流行的全栈 React 框架。 Next.js 13 版本引入了应用程序路由器,它为我们提供了服务器组件和服务器操作等功能,使我们能够获取数据并在服务器上渲染 React 组件。

如果 Next.js 的某些功能对您来说有点难以掌握,那么用于制作动态和静态网站的一个很好的全栈替代方案是 Remix。

如果您正在制作一个想要快速加载并主要提供静态内容的应用程序,另一个不错的选择是 Astro。 Astro 允许您将 React 与 Vue 和 Svelte 等其他框架一起使用,这意味着它是与框架无关的,并且旨在向客户端提供最少量的必要 JavaScript,从而实现非常快的加载时间。

📦 包管理器

要安装本指南中列出的所有这些库,您将需要一个称为包管理器的东西。

如果您安装了 Node.js(这是在计算机上本地运行 React 项目所必需的),您可以简单地使用 NPM,这在 2024 年仍然是一个不错的选择。NPM 还有其他替代品,包括 Yarn 和 PNPM。

最新的替代方案是 Bun,它在 JavaScript 世界中迅速变得非常流行。 Bun 既是一个像 Node 一样的 JavaScript 运行时,也是一个包管理器,并且被宣传为 Node 和 NPM 的更快替代品。

🎨 CSS 和 UI 库

现在您已经设置了项目并安装了库,您将如何设计您的 React 项目?

我上面提到的所有框架都包含基本的 CSS 支持。如果你想坚持使用纯 CSS 来设计你的 React 项目,那么到 2024 年就完全没问题了。

您可以使用 CSS 样式表或 CSS 模块,但就纯样式而言,目前最流行的选择可能是使用 Tailwind CSS。 Tailwind CSS 确实附带了一些设置步骤,但它允许您将预制类链接在一起,以便直接在组件文件中快速添加样式。

shadcn 是 2024 年非常流行的 UI 库,它将 Tailwind CSS 与名为 Radix UI 的组件库结合在一起。像 Radix 这样的组件库允许您轻松添加组件,而无需自己编码。 shadcn 之所以流行,是因为它在 Tailwind CSS 的帮助下可以更好地控制组件的外观。

还有许多其他非常流行的功能组件库。 Material UI 以及 Mantine 和 Chakra UI 等其他 UI 仍然很受欢迎。您选择哪一个实际上取决于您希望最终应用程序的外观。我建议尝试一堆这样的 UI 库,看看你最喜欢哪一个。

💽 状态管理

React 具有 useState 和 useReducer 等内置工具来管理基本应用程序中的应用程序状态。如果您使用 Next.js,则在使用服务器组件时,状态管理已移至 URL。尽管有这些选项,您可能需要一种更精确的方式来管理状态的方法。

您可能有很多状态,并且希望更好地控制状态更新如何呈现组件。如果是这样,您可以使用专用的状态管理库。

Zustand、Recoil 和 Jotai 等库都非常相似,允许您通过声明对象的属性和方法来管理状态。这最终是处理应用程序组件状态管理的最简单方法。

如果我必须在 2024 年为我的所有 React 项目选择一个状态管理库,我会选择 Zustand。几乎不需要时间就能学会如何使用它。它还不需要您向应用程序添加提供程序组件,这使得在您喜欢的任何组件中使用都非常方便。

🐕 数据获取

状态管理和数据获取通常是齐头并进的。如果您正在构建客户端渲染的 React 应用程序,您可能需要一个数据获取库。

2024 年,在 React 应用程序中从服务器获取数据的最佳方式仍然是 React Query 或现在的 Tanstack Query。 TanStack Query 不仅可以让您对获取数据、何时获取和重新获取数据、缓存进行细粒度控制,还可以非常轻松地更改或变异数据。

另一个可靠的替代方案是 SWR,它还提供了一个自定义挂钩来处理查询和突变,但就其提供的功能而言,它要简单得多。选择其中任何一个并获取数据并使用 fetch API 执行 HTTP 请求都不会出错。

🧭 路由

如果您使用的是 Next.js、Remix 或 Astro 等框架,那么您的路由已经处理好了。所有这些都带有内置的方法来在项目中创建路由或页面。

对于客户端渲染的 React 应用程序(例如使用 Vite 或 Create React App 制作的应用程序),您将需要选择一个路由库。 React Router 仍然是最受欢迎的选择。它可以满足您可能有的每一个路由需求。由于其使用 loader 属性加载数据的功能,它也非常先进。 loader 属性允许您获取给定路线的数据,而无需使用 React Query 等外部库。

Tanstack Router 是一个新兴的库,它似乎具有同样出色的功能。 Tanstack Router 被设计为完全类型安全,并为数据获取提供了很好的默认设置,就像 React Router 版本 6 提供的那样。

虽然 Tanstack Router 有点新,但任何一个选择都不会出错,如果您已经在应用程序中使用 Tanstack Query 或 SWR,那么它是完美的搭配。

🔒 认证

虽然身份验证是由我们项目的服务器端处理的,但值得了解哪些库在客户端和服务器上与 React 项目集成得最好。

到 2024 年,Supabase已成为一种非常强大的身份验证解决方案,并提供与 React 应用程序的轻松集成,无论是在服务器上(例如 Next.js 项目)还是在客户端上。在过去的几年中,出于类似的原因选择了 Firebase,但它更难集成到服务器端。

如果您使用 Next.js,您可以使用大量选项,例如 NextAuth、Clerk 和新来者 Lucia。不幸的是,今年 Next.js 还没有内置的身份验证库,但也许将来会有一个。

与此同时,我个人将使用 Supabase,并强烈建议您通过他们的文档查看它们。

🥞 数据库和 ORM

与身份验证非常相似,您的数据库将并且应该在很大程度上与您的服务器端代码进行交互。

Supabase 和 Firebase 等数据库不需要您拥有服务器。您可以直接在客户端中获取和更改数据,并且可以在仪表板中添加安全规则,以确保根据用户的身份验证状态和角色允许或不允许某些类型的请求。

除了这两个选项之外,如果您使用传统服务器或全栈框架,还有无数的选项。到 2024 年,人们显然更倾向于使用 MySQL 或 PostgreSQL 等 SQL 数据库,而不是 MongoDB 或 Firebase 等 NoSQL 数据库。

对于数据库,要与数据库对话,您可以使用纯 SQL 或允许您使用自定义查询语言的 ORM。 ORM 的流行选项包括 Prisma 或 Drizzle。两者都允许您生成类型安全的代码,以便您知道将返回哪些数据,并且两者都可以与您选择的 SQL 或 NoSQL 数据库很好地集成。

🕰️ 日期和时间

当您使用 JavaScript 时,始终建议您拥有一个日期库。 JavaScript 的日期构造函数是不可预测的,并且几乎不可能可靠地处理时区等事物。

有很多选择,但我倾向于使用 date-fns 或 day.js。两者都是非常小但内容丰富的库,允许您在浏览器或后端操作 JavaScript 日期。任何一个都不会出错。

📋 表格

在大多数情况下,如果您只是使用简单的注册表单构建应用程序,则可能不需要表单库,通常只需要在输入中使用 required 属性即可。

如果您正在构建更复杂的东西并且有很多表单,React Hook Form 是一个功能齐全的表单库,它允许您使用很少的代码来验证表单输入并显示错误。

其他表单库,例如 Formik 和 React Final Form,将为您提供相同的功能,但 React Hook Form 更好一些,因为它具有基于钩子的更现代的 API,并且通常需要更少的代码。

☔️ 拖放

当谈到向应用程序添加拖放功能时,您几乎肯定需要第三方库。过去最受欢迎的选择是 React Beautiful DnD。自 2024 年起,它不再接收定期更新。

展望未来,拖放的可靠替代品是使用免打扰套件。它是轻量级的,非常灵活,并且文档包含一堆超级有用的示例,涵盖了您在实现拖放时可能遇到的每个用例。

📱 移动应用程序

如果你想构建一个移动应用程序,React Native 一直是 React 开发人员可以使用的库。有一些令人兴奋的库突破了 React Native 的界限,扩展到了网络。

Expo 是一个类似于 Vite 的工具,但用于制作移动 React 应用程序。它具有快速刷新等出色功能,并且借助 Expo Go,您可以在开发项目时轻松在自己的设备上运行项目。 Expo 使您可以更轻松地获取移动代码库并将其部署到网络上。

这是 Tamagui 等其他项目的最终目标,如果您想制作一个在 Android、iOS 和 Web 上运行的真正的本机应用程序,您也应该检查一下。

如果您已经编写了要在浏览器中运行的 React 应用程序,则使其作为本机应用程序运行并在 Apple App Store 或 Google Play Store 上启动的最快方法是使用 Capacitor.js。

🚀 部署

部署 React 应用程序的方法比以往更多。Vercel 可能是部署 React 应用程序最简单的平台,无论是客户端渲染还是服务器渲染。它们几乎支持您能想到的所有框架,包括非 JavaScript 语言。他们有一个慷慨的爱好计划,同一领域的竞争对手包括 Netlify 和 Cloudflare Pages。

Cloudflare Pages 的设置可能有点棘手,特别是如果您有一个全栈 React 项目,但就价格而言,它是所有这些选项中最慷慨的。如果你不介意购买服务器,你可以使用 Railway 或 Render 之类的东西,如果你有一个与你的 React 应用程序分开的服务器,那么部署到它是很棒的。

🏆 排名第一的库

最后,如果您是 2024 年的 React 开发人员,您应该了解的第一个重要库是 TypeScript。我提到的所有框架都包含使用 TypeScript 构建 React 应用程序的选项。

TypeScript 是一个工具,可让您检测 JavaScript 代码中的类型错误,以帮助您防止运行时错误。您可以仅使用 JavaScript 构建所有 React 项目,但在某些时候,您要么会自己看到使用 TypeScript 的好处,要么会查看包含 TypeScript 的代码库。

我强烈建议您留出一些时间来学习 TypeScript。作为 React 开发人员,它是最重要、最受欢迎的工具,可以极大地提高您的整体代码质量。

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

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

相关文章

VS2019连接MySQL

VS2019连接MySQL 下载MySQL Connector/C配置头文件,库文件路径配置头文件路径配置库的路径复制dll文件 MySQL的用户设置将权限赋值给新用户 编写代码往数据库写入 老师布置的作业让我们用VS2019连接MySQL实现一个小型的日志系统,中间踩了很多的坑&#x…

神经网络与深度学习(一)误差反传BP算法

误差反传BP算法 1多层感知机1.1XOR问题1.2多层感知机 2.BP算法2.1简述2.2详解2.2.1输入输出模型2.2.2梯度下降算法迭代2.2.3前向传播在输出端计算误差2.2.4误差反传--输出层2.2.5误差反传--隐含层2.2.6误差反传--总结 1多层感知机 1.1XOR问题 线性不可分问题: 无法…

C++心决之命名空间、重载函数和引用

目录 1. C关键字(C98) 2. 命名空间 2.1 命名空间定义 2.2 命名空间使用 3. C输入&输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C支持函数重载的原理--名字修饰(name Mangling) 6. 引用 6.1 引用概念 6.2 引用特性…

Java多线程:定位死锁

检测死锁可以使用jconsole工具,或使用jps定位进程id,再用jstack定位死锁 方案1: 1. 先用jps查看所有的java进程id 2. jstack 进程id定位死锁 3. 查看死锁结果 方案2:从jdk的安装路径中找到bin目录, 点击jconsole

Linux线程原理以及基础操控函数使用(1)

线程原理 这一个课程的笔记 LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线程:有独立的PCB,但没有独立的地址空间(共享) 区别:在于是否共…

算法6.4-6.6DFS

一个不知名大学生,江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion:2024.03.27 Last edited: 2024.03.27 目录 算法6.4-6.6DFS 第1关:算法6.5采用邻接矩阵表示图的深搜 任务描述 相关知识 编程要求…

数据结构——优先级队列及多服务台模拟系统的实现

一、优先级队列的定义和存储 优先级队列定义:优先级高的元素在队头,优先级低的元素在队尾 基于普通线性表实现优先级队列,入队和出队中必有一个时间复杂度O(n),基于二叉树结构实现优先级队列,能够让入队和出队时间复杂度都为O(log…

RabbitMQ--04--发布订阅模式 (fanout)-案例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 发布订阅模式 (fanout)---案例前言RabbitListener和RabbitHandler的使用 1.通过Spring官网快速创建一个RabbitMQ的生产者项目2.导入项目后在application.yml文件中配…

Python编程-并发编程基础梳理与高级特性案例讲解

Python编程-并发编程基础梳理与高级特性案例讲解 同步、异步通信与IO阻塞 同步(Synchronous)和异步(Asynchronous)通信是两种不同的通信方式,涉及到处理任务的时序和相互等待的关系。同步通信简单直观,但可…

Unity 使用TrailRenderer制作拖尾效果

使用TrailRenderer实现拖尾效果,具体操作步骤如下: 1、创建一个空对象 在Unity场景中创建一个空对象 2、添加TrailRenderer组件 选择步骤1创建的空对象,然后在Inspector面板中点击“Add Component”按钮,搜索并添加TrailRende…

蓝桥杯第七届大学B组详解

目录 1.煤球数量; 2.生日蜡烛; 3.凑算式 4.方格填数 5.四平方和 6.交换瓶子 7.最大比例 1.煤球数量 题目解析:可以根据题目的意思,找到规律。 1 *- 1个 2 *** 3个 3 ****** 6个 4 ********** 10个 不难发现 第…

C++入门知识详细讲解

C入门知识详细讲解 1. C简介1.1 什么是C1.2 C的发展史1.3. C的重要性1.3.1 语言的使用广泛度1.3.2 在工作领域 2. C基本语法知识2.1. C关键字(C98)2.2. 命名空间2.2 命名空间使用2.2 命名空间使用 2.3. C输入&输出2.4. 缺省参数2.4.1 缺省参数概念2.4.2 缺省参数分类 2.5. …

Linux - 第三节

改变用户类型 su 仅单纯的进行身份变化 依旧处于普通用户里面 su - 进行重新登录更改身份 退出用exit / ctrld su 用户名 改成成其他身份 对一条命令进行提权 sudo command r:可读 w:可写 x:可执行 -:对应的权限位置,没有权限 去掉所有权限 chmod u…

Qt中继承QCheckBox的类结合QTableWidget实现多选并且每个多选的id都不一样

1.相关描述 继承QCheckBox的类MyCheckBox&#xff0c;利用QTableWidget的setCellWidget方式添加MyCheckBox类的对象 2.相关页面 3.相关代码 mycheckbox.h #ifndef MYCHECKBOX_H #define MYCHECKBOX_H#include <QCheckBox> #include <QObject>class MyCheckBox : pu…

Elvis Presley 英文阅读

Elvis Presley 官方翻译 One of the most popular American singers of thetwentieth century was Elvis Presley. He made theRock & Roll music popular around the world. He sold millions of records and made manysuccessful films, and he helped change the dir…

基于SSM医院病历管理系统

基于SSM医院病历管理系统的设计与实现 摘要 病历管理系统是医院管理系统的重要组成,在计算机技术快速发展之前&#xff0c;病人或者医生如果想记录并查看自己的健康信息是非常麻烦的&#xff0c;因为在以往病人的健康信息通常只保存在自己的病历卡或者就诊报告中&#xff0c;…

TikTok直播专线:解决出海网络问题痛点,提升商业效率

近年来&#xff0c;TikTok作为全球最受欢迎的社交媒体平台之一&#xff0c;成为商家获取商机与市场的重要平台。然而&#xff0c;尽管商家纷纷进入TikTok&#xff0c;试图借助其强大的社交网络进行产品推广和销售&#xff0c;但在TikTok平台进行直播时&#xff0c;往往会遇到网…

何时应用 RAG 与微调

充分发挥 LLM 的潜力需要在检索增强生成&#xff08;RAG&#xff09;和微调之间选择正确的技术。 让我们来看看何时对 LLM、较小的模型和预训练模型使用 RAG 与微调。我们将介绍&#xff1a; LLM 和 RAG 的简要背景RAG 相对于微调 LLM 的优势何时针对不同模型大小对 RAG 进行…

WebGIS 之 vue3+vite+ceisum

1.项目搭建node版本在16以上 1.1创建项目 npm create vite 项目名 1.2选择框架 vuejavaScript 1.3进入项目安装依赖 cd 项目名 npm install 1.4安装cesium依赖 pnpm i cesium vite-plugin-cesium 1.5修改vite.config.js文件 import { defineConfig } from vite import vue fr…

labelme AI 模型运用

一、lebelme 1、界面介绍 点击上图位置&#xff0c;选择对应的模型。这里我每个模型都测试了一下&#xff0c;EfficientSam这个模型最好用&#xff0c;准确率和速度都ok。 2、使用方法 目标框标注方法&#xff1a;点左上角【编辑】-> 【Create Ai-Mask】就可以标志了&…