原文链接:React Libraries for 2024[1],翻译时有删改。
导读:这是一份来自国外程序员 Robin Wieruch 的个人总结,每年都会更新。相比于 Awesome 列表[2],我个人更喜欢这类总结,简短、实用,更容易让人抓到重点并能立即实施。
React 的是一个由组件驱动的 UI 框架,JSX 以及 React Hook 都是其首创的先进理念。经过多年的发展,React 拥有一套非常庞大的生态系统,不过这也导致从其他库/框架转过来的开发人员带来选择困难。
React 通过 React Hooks 为编写组件提供了一些内置解决方案,包含管理本地状态、副作用和一些性能优化的 Hooks,不过能解决的问题有限。
接下来,我们将针对不同应用场景,深入了解一些 React 生态系统中我们可以使用的一些库。并且,每一小节最后都会包含我的一些个人推荐。
创建新项目
对 React 初学者来说,最受欢迎的方式时使用 Vite 来创建 React 项目。Vite 本身是一款通用开发打包工具,还支持其他框架项目[3]的创建。
# Create a react project using `create-vite` CLI
npm create vite@latest my-vue-app -- --template react
# Create a react project with TypeScript support
npm create vite@latest my-vue-app -- --template react-ts
如果你已经熟悉 React,那么可以选择使用目前最流行的 Meta 框架之一的 Next.js[4]。Next.js 基于 React 进行构建。另外一个流行的替代方案是 Remix[5]。
Next.js 最初用于服务端渲染,不过后面加入了静态内容渲染支持。2023 年,Next.js 在 App Router 中率先引入了 React Server 组件支持,编程模型从客户端移动到服务器端,是一次重大的编程范式转变。
如果你要寻找一个对静态内容渲染具有最佳性能的框架,那么可以看看 Astro[6]。Astro 与框架无关,构建之后只会向浏览器提供 HTML 和 CSS,仅在页面组件在进行交互的时候,客户端才会请求必要的 JavaScript。
如果你想学习 Vite 的工作原理,那么可以参照 Vite 官方的 React 项目模板[7],从 0 到 1 的搭建一遍。虽然这不是你日常工作中必须要做的事情,但是自从 Vite 成为 webpack 的继承者之后,了解底层工具会对你编写项目提供更多自信。
如果你是 React 老手的话,并且想尝试一些新库那么可以看 Nitro[8] 或 Waku[9]。Waku 也是非常著名的状态管理库 Zustand[10] 作者的作品,提供 React Server 组件支持。
建议
-
使用 Vite 创建客户端渲染程序 -
使用 Next.js 创建服务端渲染程序 -
使用 Astro 创建静态页面程序
包管理器
提到 React 的包管理器,也就是在说 JavaScript 生态系统的包管理器。目前最被广泛使用的包括管理器是 npm,因为它是随 Node.js 一起安装的。不过现在大家更喜欢使用 yarn[11] 或者pnpm[12],因为他们能带来更好的使用体验和更大的性能提升。
如果你发现创建的多个应用程序之间,出现多个相互依赖或是共享一组通用自定义 UI 组件的现象,那这时候可以了解一下多包仓库(monorepo)的概念,就是一个仓库中包含多个项目。
现在的包管理器都能通过 workspaces 特性来支持 monorepo 的构建,在这一点上 yarn、pnpm 比 npm 要好。当然,如果能再配合 Turborepo[13] 这类 monorepo pipeline 工具的使用,体验会更好。
建议
-
选择一个包管理器并坚持使用 -
使用最广泛的是 npm -
希望有更好性能,但目前还没那么流行的就选 pnpm -
如果是 monorepo,请查看 Turborepo 相关教程
状态管理
React 本身提供了两个用于管理本地状态的 Hook:useState[14] 和 useReducer[15]。像全局状态管理的话,可以选择使用内置的 useContext[16] Hook,这就避免了层层父子组件进行 props 传递来共享状态的问题。
如果你发现自己很频繁地在使用 React 的 Context Hook 来实现共享/全局状态,这个时候就该看看 Zustand[17] 了。它能帮助你更好的管理应用程序的全局状态,方便你在任意层级的 React 组件中进行状态的读取和修改。
虽然 Zustand 已经成为社区事实标准,不过说到状态管理库,你可能怎么也无法绕过 Redux——它现在仍然是最流行的状态管理库。 Redux 用起来比 Zustand 要复杂很多,不过实际上有很多旧的 Rect 应用程序在使用 Redux。
如果你正在使用 Redux,那你应该看看 Redux Toolkit[18]。如果你对状态机感兴趣,可以查看XState[19] 和 Zag[20]。如果你不喜欢使用 Zustand 或者 Redux 作为全局状态管理工具,那么还有一些其他流行的全局状态管理方案,例如:Jotai[21]、Recoil[22] 或 Nano Stores[23]。
建议
-
useState
/useReducer
用于 co-located 或共享状态 -
useContext
用于小范围状态(little global state) -
Zustand(或其他替代方案)用于全局状态管理(lots of global state)
数据获取
React 提供了一些内置的管理本地状态的一些 Hook,不过当涉及到远程数据的状态管理时,我建议还是使用专用的数据获取库,比如说 TanStack Query[24](前身是 React Query)。
TanStack Query 并没有把自己定位成只是一个状态管理库,它主要是提供了 API 来获取远程数据,但会对获取到的数据进行状态管理(比如:缓存、乐观更新(optimistic updates))。
TanStack Query 专为 REST API 设计,不过它现在也支持 GraphQL。但是,如果你要寻找专为 GraphQL 设计的库,那么可以看一下 Apollo Client[25](流行)、urql[26](轻量)或 Relay[27](Facebook 出品)。
如果你正在使用 Redux,并且想要在 Redux 中添加集成了状态管理功能的数据获取方案,那么可以查看一下 RTK Query[28],它将数据获取的能力巧妙地继承到 Redux 中,而无需借助 TanStack Query。
最后要说的是,如果你需要同时控制前后端(均使用 TypeScript 编写),那么可以看看 tRPC[29],它能提供端到端类型安全的 API。去年我就一直在使用它,极大的提高了我的生产力和DX,并且它还能跟 TanS tack Query 很好的结合使用。
建议
-
TanStack Query 用于 REST APIs 活 GraphQL APIs -
与 axios[30] 或 Fetch API[31] 结合使用 -
Apollo Client 专用于 GraphQL APIs -
tRPC 提供前后端紧密耦合的 CS 架构
路由
如果你正在使用 Next.js 这样的 React 框架,那么就已经内置了路由的功能。但是,如果你是在没有框架的情况下使用了 React,比如你的项目是使用 Vite 来创建的纯客户端渲染项目,那么最强大和最流行的路由库,非 React Router[32] 莫属了。TanStack Router[33] 则是另一个完全支持 TypeScript 的新替代方案。
使用 React Router 做客户端路由时,基于路由的代码分割做起来并不复杂。如果你碰巧需要做这部分的优化,那么可以使用 @loadable/component[34] 来替代 React.lazy()
。
React 中还有一套条件渲染技术,与路由功能有些相似,能实现页面级别上的组件替换,但只能处理一些简单的场景,是你在初学 React 会接触到一个技术。
建议
-
最常用的:React Router -
未来趋势:TanStack Router -
主要是因为一流的 TS 支持
CSS 样式
React 关于设置样式有很多选择,本节并不能完全覆盖,在这里可以跟大家讲一个大概。
对于 React 的初学者而言,可以从在 JSX 中直接使用 style
prop 对象设置内联样式开始,这是最简单的方式,虽然实际项目中很少使用。
const Headline = ({ title }) =>
<h1 style={{ color: 'blue' }}>
{title}
</h1>
这种方案还可以搭配外部的 CSS 文件一起使用。
import './Headline.css';
const Headline = ({ title }) =>
<h1 className="headline" style={{ color: 'blue' }}>
{title}
</h1>
一旦你的应用规模开始增大,就可以考虑其他的一些样式方案。
首先,我建议你了解一下 CSS 模块(CSS Modules),这是众多 CSS-in-CSS 解决方案之一。 CSS 模块提供了一种将 CSS 的封装与特定组件关联的技术(“component co-located modules”)。这样独属于本组件的样式,就不会泄露到其他组件中。
import styles from './style.module.css';
const Headline = ({ title }) =>
<h1 className={styles.headline}>
{title}
</h1>
其次,我将向你展示另外一种样式化组件的方式,不过已经不再推荐了。这种方案的一个代表库就是 styled-components[35](或者 emotion[36]),它借助 JavaScript 以及 React 组件的方式来创建并组织样式。
import styled from 'styled-components';
const BlueHeadline = styled.h1`
color: blue;
`;
const Headline = ({ title }) =>
<BlueHeadline>
{title}
</BlueHeadline>
第 3 个我想推荐的方案是以 Tailwind CSS[37] 为代表的工具类优先的 CSS 解决方案。Tailwind CSS 中预定义了很多 CSS 类,简化了设计系统,可以让开发人员更加高效的开发。
const Headline = ({ title }) =>
<h1 className="text-blue-700">
{title}
</h1>
不过,也带来了一些学习成本以及行内类名冗余的代价。这也正应了的那句话,没有哪种技术是最好的,一项技术推出的背后都是基于现状的一个权衡结果。
使用 CSS-in-CSS 还是工具类优先的 CSS 方案由你决定。趋势是向工具类优先的 CSS 方案倾斜。CSS-in-CSS 由于服务器端环境的问题不再那么流行。
最后一个温馨提示:如果在你的 React 项目中需要有条件的来应用 className,那么可以考虑使用像 clsx[38] 这样的工具库。
建议
-
工具类优先(最流行) -
例如:Tailwind CSS -
CSS-in-CSS -
CSS 模块 -
CSS-in-JS(由于存在问题,个人不再推荐) -
Styled Components 或是 Facebook 的 StyleX[39] -
CSS-in-TS[40] -
支持 TypeScript 和服务器端渲染
UI 库
作为 React 初学者,我还是建议先学习如何构建可重用组件,这会是很好学习效果。不管是下拉列表、选择、单选按钮还是复选框,你都应该知道如何来创建这些 UI 组件。
不过,如果你没有足够的资源来自己设计组件,那么就需要现成的一些 UI 库。UI 库一般会为你预置很多现成的组件,有统一的设计风格、丰富的功能交互或是可访问性支持。
-
Material UI[41] (MUI) (在开源领域仍然是最受欢迎的项目) -
Mantine UI[42](2022 年最受欢迎) -
Chakra UI[43](2021 年最受欢迎) -
NextUI[44](基于 React Aria[45]) -
Park UI[46](基于 Arc UI[47])
不过,趋势正在转向无头 UI 库(headless UI libraries)。它们没有样式,但具有现代组件库所需的所有功能和可访问性。这里的大多数无头 UI 库,基本上都跟实用类优先的 CSS 解决方案(如 Tailwind CSS)结合使用:
-
shadcn/ui[48](2023 年最受欢迎) -
Radix[49] -
React Aria[50] -
Catalyst[51] -
Daisy UI[52] -
Headless UI[53] -
Tailwind UI[54](收费) -
Ark UI[55](来自 Chakra UI 的作者)
这里还有一些 UI 库,相比其他我们已经说过的,可能会有一些过时。
-
Ant Design[56] -
Semantic UI[57] -
React Bootstrap[58] -
Reactstrap[59]
以上这些都是综合性的 UI 库,包含很多内置组件。但功能上往往无法与只专注于一个 UI 组件的库强大。例如:react-table-library[60],是一个专注于展示表格的库,还为你提供了不同主题(比如: Material UI),方便你更好的与其他 UI 库配合使用。
动画库
我们通常会使用 CSS 来实现 Web 应用中的一些动画,当发现不够用的时候,通常会考虑 React Transition Group[61]。其他一些有名的 React 动画库还包括:
-
Framer Motion[62](最推荐) -
react-spring[63] -
react-motion[64] -
react-move[65]
可视化图表库
如果你想从头去构建自己的图表,那么使用 D3[66] 是没有办法的。它是一个低抽象的可视化库,虽然能提供一切能帮你创建令人炫酷图表的能力,但是学习曲线过于陡峭。因此很多开发人员会损失灵活性,直接选择一个 React 图表库使用。
目前的流行解决方案是:
-
Recharts[67](个人比较推荐) -
现成的图表 -
出色的可组合性 -
支持定制 -
visx[68] -
介于高层抽象与 D3 之间的水平 -
更陡峭的学习曲线 -
预制的图表类型越多,定制就越困难 -
Victory[69] -
nivo[70] -
react-chartjs[71]
表单库
React 中最流行的表单库是 React Hook Form[72],它具有表单库所需要的一切功能:验证(最常跟 zod[73] 集成),表单提交、表单状态管理。其他一些替代方案有 Formik[74] 和 React Final Form[75]。
推荐
-
React Hook Form -
与 zod 集成做校验
类型检查
React 附带了一个名为 PropTypes[76] 的内部 props 验证库。通过使用 PropTypes,你可以为 React 组件定义传入 props 类型。每当传入错误的 prop 类型给组件时,都会收到一条错误消息:
import PropTypes from 'prop-types';
const List = ({ list }) => (
<div>
{list.map((item) => (
<div key={item.id}>{item.title}</div>
))}
</div>
);
List.propTypes = {
list: PropTypes.array.isRequired,
};
不过,PropTypes 已经从 React 中移除了。现在,我不建议大家使用 PropTypes,出于历史原因,我仍然将它们保留在这里。
行业标准是在 React 应用程序中使用 TypeScript。如今,几乎所有新的 React 项目都采用 TypeScript 编写。
type Item = {
id: string;
title: string;
};
type ListProps = {
list: Item[];
};
const List = ({ list }: ListProps) => (
<div>
{list.map((item) => (
<div key={item.id}>{item.title}</div>
))}
</div>
);
使用 TypeScript 编写代码是当今的主流方式。如果你想在 TypeScript 之外进行表单类型验证,API 验证(例如在使用 tRPC 时),可以看看 Zod[77]。
建议
-
如果需要类型化 JavaScript,请使用 TypeScript
代码结构
如果你想在 React 项目中采用统一且通用的代码风格(code style),可以使用 ESLint[78]。像 ESLint 这样的 Linter 工具会强制你的代码遵循某种格式。你可以使用 ESLint 要求遵循流行的风格指南,比如 Airbnb Style Guide[79],或是将 ESLint 集成到你的 IDE/编辑器中(比如 VSCode 的 ESLint 插件[80]),去标识错误。
如果你想在 Raect 项目中采用统一的代码格式(code format),可以使用 Prettier[81]。它是一个有主见(Opinionated)的代码格式化工具,只提供少数几种对外可供选择的配置。你可以将 Prettier 集成到你的 IDE/编辑器中(比如 VSCode 的 Prettier 插件[82]),以便每次保存文件时都能自动格式化你的代码。Prettier 虽然并没有取代 ESLint,但它与 ESLint 集成得很好[83]。
也许 2024 年的后起之秀将是 Biome[84](以前的 Rome(已停止维护)),因为就交互而言,ESLint 和 Prettier 并不是最受欢迎的工具,不过却是现在每个 Web 开发人员的日常工作中都必需掌握的。Biome 希望通过提供快速(基于 Rust)且一体化的工具链来成为 Prettier 和 ESLint 的替代品。
建议
-
ESLint + Prettier,同时 -
给 Biome 一个机会
认证
你可能要问你的 React 项目引入注册、登录和注销等功能做身份验证,或是其他像密码重置和密码更改的功能。这些功能远远超出了 React 的范围,因为这是后端应用程序会为你管理的事情。
最好的学习方式是自己实现一个身份验证的后端应用程序(例如 GraphQL 后端[85])。然而,由于身份验证涉及很多安全风险,并非每个人都知道的要注意的细节,因此我建议使用现成的很多身份验证/backend-as-a-service 解决方案:
-
Lucia[86] -
一个非常有趣的开源项目 -
让你独立于任何第三方服务 -
Supabase Auth Supabase[87] -
Clerk[88] -
AuthKit[89] -
NextAuth[90] -
Firebase Auth[91] -
Auth0[92] -
AWS Cognito[93]
后端
现在有一个很明显地将 React 转移到服务器的趋势,目前最自然的选择是像 Next.js、Astro 或 Remix 这样的元框架。
如果由于各种原因无法使用全栈框架(同时仍然可以使用 JS/TS),可以看看 tRPC[94] 或 Hono[95]。值得一提的是老派但仍然流行的 Express 框架[96],其他同类替代方案还有 Fasitfy[97] 或 Nest[98]。
数据库
这部分其实与 React 无关。但由于全栈 React 应用程序如今越来越流行,React 现在开始更接近数据库层了。在开发 Next.js 应用程序时,你很可能要处理数据库 ORM。目前最受欢迎的 ORM 是 Prisma[99]。另一个流行的替代方案是 Drizzle ORM[100]。其他一些的替代方案还包括 Kysely[101] 和 database-js[102](仅限 PlanetScale)。
在选择数据库时,Supabase(或 Firebase)是比较可靠的数据库提供商。Supabase with its PostgreSQL 可以自行托管或使用付费服务。
其他提供 serverless 数据库的流行替代方案是 PlanetScale[103](个人推荐)、Neon[104] 和 Xata[105]。
托管
你可以像任何其他 Web 应用程序一样部署和托管 React 应用程序。如果你想完全控制,可以选择 Digital Ocean[106] 之类的服务商。如果你不想管太多,那么可以选择 Netlify[107] 或 Vercel[108](尤其是 Next.js)这些流行解决方案。
如果你已经在使用第三方后端作为服务(例如 Firebase/Supabase),你可以看看他们是否提供托管服务。其他流行的托管提供商包括 Render[109]、Fly.io[110]、Railway[111],或直接在 AWS/Azure/Google Cloud/Hetzner 上托管。
测试
如果你想深入了解 React 中的测试,可以阅读这篇文章《How to test components in React》[112]。要点:测试 React 应用程序的骨架通常需要像 Jest[113] 这样的测试框架。
Jest 能为你提供测试运行器、断言库以及监测(Spying)、模拟等功能,也就是一个综合测试框架所需的一切。如果你是 Vite 的迷弟迷妹,那么可以选择 Vitest[114] 作为 Jest 的替代。
最小化情况,你可以只使用 react-test-renderer[115] 在测试框架中渲染 React 组件,Jest/Vitest 本身能提供快照测试。快照测试的工作方式如下:运行测试后,会创建一份 React 组件渲染的 DOM 元素的快照。当你在某个时间点再次运行测试时,会创建另一个快照,使用快照用与前一次快照的进行比对,如果不同,测试框架就会跟你抱怨,你要么必须接受快照,要么调整组件。
不过,现在最流行的 Raect 组件测试库还是 React Testing Library (RTL)[116],RTL 可以用来渲染组件并且模拟 HTML 元素上的事件,而我们的测试框架则专门用于断言。
如果你正在寻找适用于 React 的端到端(E2E)测试工具,Playwright[117] 和 Cypress[118] 最受欢迎。
建议
-
单元/集成测试:Vitest + React Testing Library (最受欢迎) -
快照测试:Vitest -
E2E 测试:Playwright 或 Cypress
不可变的数据结构
原生 JavaScript 为你提供了大量内置工具方法来处理数据结构,不过好些工具方法都会对数据结构做修改。如果你和你的团队觉得需要强制执行不可变的数据结构,那么最受欢迎的选择是 Immer[119]。
国际化
当涉及 React 应用程序的国际化[120]时,你不仅需要考虑翻译,还需要考虑多元化(pluralizations)、日期和货币的格式及其他一些事情。
以下是目前最流行的库:
-
FormatJS[121] -
react-i18next[122] -
Lingui[123]
富文本编辑器
说到 React 中的富文本编辑器,我只能想到以下几个:
-
Plate[124] -
Lexical[125] -
Slate.js[126]
付款
最常见的支付提供商是 Stripe 和 PayPal。两者都可以巧妙地集成到 React 中。这里有一个与 React 集成的有效 Stripe 模板方案[127]。
-
PayPal[128] -
Stripe -
React Stripe Elements[129] -
Stripe Checkout[130]
时间
如果你的 React 项目中要大量处理日期、时间和时区,那么可以引入一个库来为你管理这些事情。以下是我推荐的一些选择:
-
date-fns[131] -
Day.js[132] -
Luxon[133]
桌面程序
Electron[134] 和 Tauri[135] 是跨平台桌面应用程序的首选框架。
文件上传
-
react-dropzone[136]
邮件
-
react-email[137](个人推荐) -
Mailing[138] -
mjml[139]
拖放
我使用过 react-beautiful-dnd 的后继者 @hello-pangea/dnd[140],所以我不能对它说任何负面的话(狗头)。
dnd kit[141] 是一种流行的替代方案,提供了更多的灵活性和选项,但代价是学习曲线更陡峭。这个领域的另一个替代方案是 react-dnd[142]。
移动开发
将 React 从 Web 引入移动设备的首选解决方案仍然是 React Native[143],用来创建 React Native 应用程序的最流行框架是 Expo[144]。
如果你需要跨 Web 和移动设备的统一组件,可以看看 Tamagui[145]。
VR/AR
React 也可以应用于虚拟现实或增强现实。老实说,我没有使用过任何这些库,而且大多数都还处于早期阶段(实验性),但当涉及到 React 中的 AR/VR 时,我从头到尾就知道它们:
-
react-three-fiber[146] (一个流行的 3D 库) -
react-360[147] -
aframe-react[148]
原型设计
如果你有 UI/UX 背景,可能希望使用一个工具来快速构建新的 React 组件、布局的原型。我个人在使用 Figma[149]。对于粗糙但轻量级的原型,我喜欢使用 Excalidraw[150],其他还有一些人更喜欢 tldraw[151]。
组件文档
如果你负责负责组件编写文档,那么目前网络上有各种简洁的 React 文档工具。我在很多项目中使用过 Storybook,不过对它持中立看法。我也听说过有关其他好的解决方案:
-
Docusaurus[152] -
Docz[153] -
Styleguidist[154] -
React Cosmos[155]
总结
我们可以把“React 生态系统”看成是以 React 为核心的“框架”,这是有一定灵活性的。你可以基于项目的自身状况,自行决定要采用加入哪些库。当然,你也可以从小处开始,先添加一些库来解决特定问题。相比之下,如果你需要 React,那么只用 React 来保持项目轻量也完全没问题。
React Libraries for 2024: https://www.robinwieruch.de/react-libraries/
[2]Awesome 列表: https://github.com/enaqx/awesome-react
[3]支持其他框架项目: https://vitejs.dev/guide/#browser-support
[4]Next.js: https://nextjs.org/
[5]Remix: https://remix.run/
[6]Astro: https://astro.build/
[7]Vite 官方的 React 项目模板: https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react
[8]Nitro: https://nitro.unjs.io/
[9]Waku: https://github.com/dai-shi/waku
[10]Zustand: https://github.com/pmndrs/zustand
[11]yarn: https://yarnpkg.com/
[12]pnpm: https://pnpm.io/
[13]Turborepo: https://turborepo.org/
[14]useState: https://react.dev/reference/react/useState
[15]useReducer: https://react.dev/reference/react/useReducer
[16]useContext: https://react.dev/reference/react/useContext
[17]Zustand: https://docs.pmnd.rs/zustand/getting-started/introduction
[18]Redux Toolkit: https://redux-toolkit.js.org/
[19]XState: https://github.com/statelyai/xstate
[20]Zag: https://github.com/chakra-ui/zag
[21]Jotai: https://github.com/pmndrs/jotai
[22]Recoil: https://github.com/facebookexperimental/Recoil
[23]Nano Stores: https://github.com/nanostores/nanostores
[24]TanStack Query: https://tanstack.com/query
[25]Apollo Client: https://www.apollographql.com/docs/react/
[26]urql: https://formidable.com/open-source/urql/
[27]Relay: https://github.com/facebook/relay
[28]RTK Query: https://redux-toolkit.js.org/rtk-query/overview
[29]tRPC: https://trpc.io/
[30]axios: https://www.npmjs.com/package/axios
[31]Fetch API: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
[32]React Router: https://reactrouter.com/
[33]TanStack Router: https://tanstack.com/router
[34]@loadable/component: https://www.npmjs.com/package/@loadable/component
[35]styled-components: https://www.robinwieruch.de/react-styled-components/
[36]emotion: https://emotion.sh/
[37]Tailwind CSS: https://tailwindcss.com/
[38]clsx: https://github.com/lukeed/clsx
[39]StyleX: https://stylexjs.com/
[40]CSS-in-TS: https://github.com/andreipfeiffer/css-in-js
[41]Material UI: https://material-ui.com/
[42]Mantine UI: https://mantine.dev/
[43]Chakra UI: https://chakra-ui.com/
[44]NextUI: https://nextui.org/
[45]React Aria: https://www.npmjs.com/package/react-aria
[46]Park UI: https://park-ui.com/
[47]Arc UI: https://design.arcxp.com/
[48]shadcn/ui: https://ui.shadcn.com/
[49]Radix: https://www.radix-ui.com/
[50]React Aria: https://react-spectrum.adobe.com/react-aria/
[51]Catalyst: https://tailwindcss.com/blog/introducing-catalyst
[52]Daisy UI: https://daisyui.com/
[53]Headless UI: https://headlessui.com/
[54]Tailwind UI: https://www.tailwindui.com/
[55]Ark UI: https://ark-ui.com/
[56]Ant Design: https://ant.design/
[57]Semantic UI: https://react.semantic-ui.com/
[58]React Bootstrap: https://react-bootstrap.github.io/
[59]Reactstrap: https://reactstrap.github.io/?path=/story/home-installation–page
[60]react-table-library: https://www.npmjs.com/package/@table-library/react-table-library
[61]React Transition Group: https://reactcommunity.org/react-transition-group/
[62]Framer Motion: https://www.framer.com/motion/
[63]react-spring: https://github.com/react-spring/react-spring
[64]react-motion: https://github.com/chenglou/react-motion
[65]react-move: https://github.com/sghall/react-move
[66]D3: https://d3js.org/
[67]Recharts: http://recharts.org/
[68]visx: https://github.com/airbnb/visx
[69]Victory: https://formidable.com/open-source/victory/
[70]nivo: https://nivo.rocks/
[71]react-chartjs: https://github.com/reactchartjs/react-chartjs-2
[72]React Hook Form: https://react-hook-form.com/
[73]zod: https://github.com/colinhacks/zod
[74]Formik: https://github.com/jaredpalmer/formik
[75]React Final Form: https://final-form.org/react
[76]PropTypes: https://facebook.github.io/react/docs/typechecking-with-proptypes.html
[77]Zod: https://github.com/colinhacks/zod
[78]ESLint: https://eslint.org/
[79]Airbnb Style Guide: https://www.npmjs.com/package/eslint-config-airbnb
[80]ESLint 插件: https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
[81]Prettier: https://github.com/prettier/prettier
[82]Prettier 插件: https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode
[83]与 ESLint 集成得很好: https://www.robinwieruch.de/prettier-eslint/
[84]Biome: https://biomejs.dev/
[85]GraphQL 后端: https://www.robinwieruch.de/graphql-apollo-server-tutorial/
[86]Lucia: https://github.com/lucia-auth/lucia
[87]Supabase Auth Supabase: https://supabase.com/docs/guides/auth/overview
[88]Clerk: https://clerk.com/
[89]AuthKit: https://www.authkit.com/
[90]NextAuth: https://next-auth.js.org/
[91]Firebase Auth: https://www.robinwieruch.de/complete-firebase-authentication-react-tutorial/
[92]Auth0: https://auth0.com/
[93]AWS Cognito: https://aws.amazon.com/cognito/
[94]tRPC: https://trpc.io/
[95]Hono: https://hono.dev/
[96]Express 框架: https://expressjs.com/
[97]Fasitfy: https://fastify.dev/
[98]Nest: https://nestjs.com/
[99]Prisma: https://www.prisma.io/
[100]Drizzle ORM: https://orm.drizzle.team/
[101]Kysely: https://kysely.dev/
[102]database-js: https://github.com/planetscale/database-js
[103]PlanetScale: https://planetscale.com/
[104]Neon: https://neon.tech/
[105]Xata: https://xata.io/
[106]Digital Ocean: https://m.do.co/c/fb27c90322f3
[107]Netlify: https://www.netlify.com/
[108]Vercel: https://vercel.com/
[109]Render: https://render.com/
[110]Fly.io: https://fly.io/
[111]Railway: https://railway.app/
[112]《How to test components in React》: https://www.robinwieruch.de/react-testing-tutorial/
[113]Jest: https://github.com/facebook/jest
[114]Vitest: https://vitest.dev/
[115]react-test-renderer: https://www.npmjs.com/package/react-test-renderer
[116]React Testing Library (RTL): https://www.robinwieruch.de/react-testing-library/
[117]Playwright: https://playwright.dev/
[118]Cypress: https://www.robinwieruch.de/react-testing-cypress/
[119]Immer: https://github.com/immerjs/immer
[120]React 应用程序的国际化: https://www.robinwieruch.de/react-internationalization/
[121]FormatJS: https://github.com/formatjs/formatjs
[122]react-i18next: https://github.com/i18next/react-i18next
[123]Lingui: https://lingui.dev/
[124]Plate: https://platejs.org/
[125]Lexical: https://github.com/facebook/lexical
[126]Slate.js: https://www.slatejs.org/
[127]这里有一个与 React 集成的有效 Stripe 模板方案: https://github.com/rwieruch/react-express-stripe
[128]PayPal: https://developer.paypal.com/docs/checkout/
[129]React Stripe Elements: https://github.com/stripe/react-stripe-js
[130]Stripe Checkout: https://stripe.com/docs/payments/checkout
[131]date-fns: https://github.com/date-fns/date-fns
[132]Day.js: https://github.com/iamkun/dayjs
[133]Luxon: https://github.com/moment/luxon/
[134]Electron: https://www.electronjs.org/
[135]Tauri: https://github.com/tauri-apps/tauri
[136]react-dropzone: https://react-dropzone.js.org/
[137]react-email: https://react.email/
[138]Mailing: https://www.mailing.run/
[139]mjml: https://mjml.io/
[140]@hello-pangea/dnd: https://github.com/hello-pangea/dnd
[141]dnd kit: https://dndkit.com/
[142]react-dnd: https://github.com/react-dnd/react-dnd
[143]React Native: https://facebook.github.io/react-native/
[144]Expo: https://www.robinwieruch.de/react-native-expo/
[145]Tamagui: https://tamagui.dev/
[146]react-three-fiber: https://github.com/pmndrs/react-three-fiber
[147]react-360: https://facebook.github.io/react-360/
[148]aframe-react: https://github.com/supermedium/aframe-react
[149]Figma: https://www.figma.com/
[150]Excalidraw: https://excalidraw.com/
[151]tldraw: https://www.tldraw.com/
[152]Docusaurus: https://github.com/facebook/docusaurus
[153]Docz: https://github.com/doczjs/docz
[154]Styleguidist: https://github.com/styleguidist/react-styleguidist
[155]React Cosmos: https://reactcosmos.org/
原文始发于微信公众号(写代码的宝哥):React 生态系统(2024 版本)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/243622.html