128 lines
11 KiB
Plaintext
128 lines
11 KiB
Plaintext
---
|
||
title: React 的发展历程和历史
|
||
description: React 的演变概述,从其 Facebook 起源到目前作为一种多功能、经过实战考验的库,拥有庞大的工具和创新生态系统。
|
||
---
|
||
|
||
## 为什么选择 React?
|
||
|
||
为什么 React 在前端生态系统中长期保持主导地位?这有几个关键原因:
|
||
|
||
* **企业支持和企业采用**:React 创建于 Facebook,并为他们的所有产品用户界面提供支持。它受到全球主要公司和企业的信赖,用于构建各种规模的应用程序。
|
||
* **巨大的社区支持**:有大量用于学习 React 的资源,包括 React 的官方文档,以及无数的教程、课程和 GitHub 项目。
|
||
* **庞大的开源生态系统**:从状态管理库(Redux、Zustand、Recoil)到 UI 组件框架(Material UI、Chakra UI),React 的生态系统非常庞大,并且不断发展。
|
||
* **服务器端和全栈功能**:React 不再仅仅用于前端。通过 Next.js 和 React Server Components,它现在已深入集成到后端,支持全栈 React 应用程序。
|
||
* **支持和稳定性**:React 一直在不断发展,同时保持良好的向后兼容性。
|
||
|
||
React 的广泛采用、强大的社区和持续创新使其成为当今前端开发的理想选择。
|
||
|
||
## React 的历史和演变
|
||
|
||
React 并非一夜之间成为使用最广泛的前端框架。它通过多年的迭代和问题解决而发展。要真正了解 React 今天的地位,回顾它的开始和发展历程会很有帮助。
|
||
|
||
**2011 – React 的诞生:** React 最初是 Facebook 的一个内部项目。工程师们在渲染动态 UI(如 Facebook 的新闻提要)时遇到了性能问题。Jordan Walke 创建了 React 的早期版本,名为“FaxJS”,后来变成了 React。
|
||
|
||
**2013 – React 开源:** React 于 2013 年 5 月在 [JSConf US 上正式开源](https://www.youtube.com/watch?v=GW0rj4sNH2w)。起初,它受到了质疑——尤其是 JSX,它将 JavaScript 与 HTML 混合在一起。然而,开发人员很快意识到 React 的 Virtual DOM 方法带来了更好的性能。
|
||
|
||
**2015 – Flux 和状态管理:** React 中的状态管理是一个日益增长的挑战,尤其是在具有复杂数据流的大型应用程序中。为了解决这个问题,Facebook 引入了 Flux,这是一种强制执行单向数据流的架构模式,使状态更改更可预测且更易于调试。Flux 启发了 Redux 的创建,由于其集中式存储、不变性原则和时间旅行调试功能,Redux 很快成为 React 的事实上的状态管理解决方案。
|
||
|
||
**2016 – 函数式组件和 Fiber 架构:** React 引入了函数式组件作为类组件的替代方案,使组件逻辑更清晰、更可重用。大约在同一时间,[React Fiber](https://github.com/acdlite/react-fiber-architecture) 的工作开始,这是对 React 核心架构和协调算法的完全重写,提高了性能,并为并发模式和 Suspense 等功能铺平了道路。
|
||
|
||
**2018 – React Hooks:** 在 Hooks 出现之前,开发人员依赖类组件来管理状态和生命周期方法。在 React Conf 2018 上发布,React 16.8 引入了 Hooks(`useState`、`useEffect` 等),将 React 的开发风格转向函数式编程。
|
||
|
||
**2020 – 并发模式和 Suspense:** React 17 为并发模式奠定了基础,允许 React 优先处理渲染工作,并使应用程序感觉更灵敏。React Suspense 使数据获取更容易。
|
||
|
||
**2021 - React Forget:** [React Forget](https://www.youtube.com/watch?v=lGEMwh32soc) 的早期预览版在 React Conf 2021 上展示。它是一个编译器,可自动生成等效于 `useMemo` 和 `useCallback` 的调用,以最大限度地减少重新渲染的成本。
|
||
|
||
**2022 – React 18 和服务器组件:** React 18 引入了自动批处理、新的 hooks(`useId`、`useTransition`)和 [React 服务器组件](https://react.dev/reference/rsc/use-server),允许开发人员将渲染工作卸载到服务器。
|
||
|
||
**2023 – 新的官方网站:** React 推出了 [react.dev](https://react.dev/) 作为 React 文档和资源的新官方网站,为开发人员提供了更全面、用户友好的体验,其中包括嵌入式编码练习。
|
||
|
||
**2024 – React 19:** 最新 React 版本进一步优化了服务器组件并改进了静态站点生成。Actions 的引入简化了状态更新,使 React 应用程序更易于管理。React Compiler 的实验性版本在 React Conf 2024 上[发布](https://react.dev/blog/2024/10/21/react-compiler-beta-release)。
|
||
|
||
## React 生态系统
|
||
|
||
React 生态系统非常庞大,由几个官方和社区驱动的项目组成,这些项目扩展了 React 的功能。这些项目帮助开发人员构建可扩展、高性能和可维护的应用程序。
|
||
|
||
目标是熟悉并获得每个类别中至少一项技术的经验。
|
||
|
||
### 状态管理
|
||
|
||
React 具有内置的状态管理(`useState`、`useReducer` 和 Context API),但外部解决方案通常用于管理全局状态。
|
||
|
||
* [Redux](https://redux.js.org): 一种可预测的状态容器,常用于大型应用程序
|
||
* [Zustand](https://zustand-demo.pmnd.rs): Redux 的轻量级替代方案,具有简单的 API
|
||
* [Jotai](https://jotai.pmnd.rs): React 的最小原子状态库
|
||
|
||
### UI 组件
|
||
|
||
许多 UI 库为 React 应用程序提供样式化和可主题化的组件。
|
||
|
||
* [MUI (Material UI)](https://mui.com): 一种流行的、可主题化的组件库,最初基于 Material Design
|
||
* [Mantine](https://mantine.dev): 一个现代的、功能齐全的 React 组件库,具有内置的可访问性、暗模式支持和灵活的样式 API
|
||
* [Ant Design](https://ant.design): 一个流行的、以企业为中心的 UI 组件库
|
||
|
||
同时,无头 UI 库提供非样式化的、完全可访问的组件,使开发人员可以完全控制样式,同时保持功能和可访问性最佳实践。
|
||
|
||
* [Headless UI](https://headlessui.com): 由 Tailwind 团队开发,它提供了完全可访问的、非样式化的组件,如模态框、下拉菜单和手风琴
|
||
* [Radix UI](https://radix-ui.com): 一组高度可组合的、可访问的组件,专为低级 UI 构建而设计,具有完全的样式灵活性
|
||
* [Base UI](https://base-ui.com/): 来自 Radix UI 和 Material UI 团队的无头、非样式化组件库
|
||
* [React Aria](https://react-spectrum.adobe.com/react-aria/): Adobe 提供的一组高度可访问的钩子,用于构建完全可定制的 UI 组件
|
||
* [Ariakit](https://ariakit.org/): 具有非样式化、原始组件的开源库,以及您可以复制并粘贴到您的应用程序中的一组样式化示例
|
||
|
||
### 数据获取
|
||
|
||
React 应用程序经常从 HTTP API 获取数据,并且已经构建了库来简化数据获取,其中包含缓存、重试和分页等有用功能。
|
||
|
||
* [React Query (TanStack Query)](https://tanstack.com/query): React 的流行服务器状态管理工具。它优化了缓存、后台同步和分页
|
||
* [SWR](https://swr.vercel.app): Vercel 提供的轻量级数据获取库,针对性能进行了优化
|
||
* [Apollo Client](https://www.apollographql.com): React 最广泛使用的 GraphQL 客户端
|
||
* [Relay](https://relay.dev): Meta 提供的 GraphQL 客户端,针对性能进行了优化
|
||
|
||
### 表单验证
|
||
|
||
用于在 React 中构建的表单的客户端验证的库。
|
||
|
||
* [React Hook Form](https://react-hook-form.com/): 一个轻量级、高性能的库,完全使用 React 钩子构建。最大限度地减少重新渲染,并支持内置验证规则和基于模式的验证(使用 Yup、Zod 等),使其成为小型和复杂表单的理想选择
|
||
* [Formik](https://formik.org/): 尽管不再维护,但它曾经是最流行的表单库之一,它提供了一种声明式方式来管理表单状态、验证和错误处理。Formik 经常与 Yup 配对进行模式验证,但与 React Hook Form 相比,往往更具主观性,并且略重
|
||
|
||
### 路由和元框架
|
||
|
||
一些框架通过添加路由、服务器端渲染和全栈功能来扩展 React(称为元框架)。
|
||
|
||
* [Next.js](https://nextjs.org): Vercel 提供的全栈 React 框架,支持各种渲染方法(例如服务器端渲染 (SSR)、静态站点生成 (SSG))和嵌套路由
|
||
* [Remix](https://remix.run) & [React Router](https://reactrouter.com): 一个全栈 React 框架,强调渐进式增强和嵌套路由,来自 React Router 的创建者。Remix 团队[将 Remix 的功能合并到 React Router v7 中](https://remix.run/blog/merging-remix-and-react-router)
|
||
* [TanStack Start](https://tanstack.com/start): 由 TanStack Router 提供支持的全栈 React 框架
|
||
|
||
### 测试和调试
|
||
|
||
React 应用程序通常需要单元测试、集成测试和端到端测试。
|
||
|
||
* [Jest](https://jestjs.io): 一个流行的单元和集成测试测试框架
|
||
* [Vitest](https://vitest.dev): 一个使用 Vite 打包和配置的测试框架
|
||
* [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/): 一个以用户为中心的测试库,模拟真实的用户交互
|
||
* [Storybook](https://storybook.js.org): 用于开发和测试独立 UI 组件的工具
|
||
* [Cypress](https://www.cypress.io): 一个流行的网站端到端 (E2E) 测试工具
|
||
* [React Developer Tools](https://react.dev/learn/react-developer-tools): 用于调试 React 组件的官方浏览器扩展
|
||
|
||
### 打包器
|
||
|
||
打包器帮助将您的模块化代码(包含导入、JSX、CSS、图像等)转换为优化的包,这些包可以在开发和生产中高效地提供。
|
||
|
||
* [Vite](https://vitejs.dev): 一个非常快的 Web 应用程序开发服务器和打包器,对 React 有很好的支持
|
||
* [Parcel](https://parceljs.org): 一个用于 JavaScript 应用程序(包括 React)的零配置打包器
|
||
* [webpack](https://webpack.js.org): 高度可配置的模块打包器,多年来一直是行业标准。由 [Turbopack](https://turbo.build/pack/docs) 继承
|
||
|
||
### 动画和效果
|
||
|
||
传统上,在 React 中构建动画非常困难。 值得庆幸的是,创建了各种动画和过渡库,使动画更容易。
|
||
|
||
* [Motion](https://motion.dev/): 一个流行的、功能强大的动画库,具有声明式 API。 以前是 Framer Motion
|
||
* [React Spring](https://react-spring.dev): 提供流畅的、基于物理的动画
|
||
* [GSAP](https://gsap.com/): 一个与 React 兼容的高性能 JavaScript 动画库
|
||
|
||
***
|
||
|
||
React 从 Meta 的早期内部库发展至今。 如今,它是一个成熟的、经过实战考验的库/框架,并不断发展。 了解其历史和生态系统,可以帮助您了解某些模式存在的原因以及 React 如何解决现实世界中的问题。
|
||
|
||
在我们浏览本指南时,请记住,公司正在寻找了解 React 核心原则、性能优化和实际应用的工程师。 在您完成本指南时,您不仅能够回答 React 面试问题,而且会更擅长使用 React。
|