项目快照:react/react,约 247,242 个 Star,51,246 个 Fork;最新推送时间 2026-08-13T15:44:43Z。本文基于仓库公开资料撰写。
项目地址:https://github.com/react/react · https://react.dev

项目速览(TL;DR)
React 是一个用于构建 Web 与原生用户界面的 JavaScript 库。根据仓库元信息,项目默认分支为 main,采用 MIT 许可证,仓库语言标注为 JavaScript,当前资料显示 Star 数为 247242,Fork 数为 51246。
仓库的主要目标是持续演进 React 核心,包括运行时、构建流程、测试体系、编译器相关能力以及面向不同发布渠道的构建产物。它不是一个完整的后端框架,也不是一个包含固定目录模板、端口和部署服务的应用脚手架;具体应用搭建方式应以官方文档和所选工具链为准。
React is a JavaScript library for building user interfaces.
来源:README
定位与目标用户
本项目的定位是用户界面库,而不是强制规定完整应用架构的平台。它通过声明式视图、组件组合和 JavaScript 中的组件逻辑,帮助开发者描述界面状态,并在数据变化后更新对应组件。
目标用户主要是需要构建交互式用户界面的前端开发者、维护大型组件系统的团队,以及希望在既有技术栈中逐步引入 React 的项目。README 明确指出,React 不对其余技术栈作预设,因此可以被加入既有项目,也可以用于创建新应用。
- Web 开发团队:使用 React 组件和 JSX 描述浏览器端界面。
- 全栈或服务端渲染团队:在 Node 环境中使用 React 进行服务端渲染,具体服务端集成方式需参考官方文档。
- 原生应用团队:通过 React Native 将 React 的组件化思路用于移动应用,但 React Native 本身是独立项目。
- React 核心贡献者:关注运行时、构建、测试、发布渠道和内部工具链,而不仅是应用层 API。
核心功能
核心功能可以归纳为声明式渲染、组件化建模和跨环境使用。每项能力都依赖组件树、状态输入和渲染器之间的协作,不能简单理解为独立的模板引擎功能。
声明式用户界面
声明式(Declarative)界面要求开发者描述某个状态下应呈现的视图,而不是逐条编写所有 DOM 修改步骤。当组件接收到新的数据或状态时,React 根据新的描述计算需要更新的部分,并由对应渲染器完成输出。
输入通常是组件属性、组件状态和上下文等数据,输出是组件树所描述的界面结果。README 对这一机制的表述是,应用可以为每种状态设计简单视图,React 会在数据变化时更新并渲染正确的组件。
基于组件的组合
组件(Component)是封装界面逻辑与状态的基本单元。组件可以接收属性,返回 JSX 或其他 React 元素,并通过父子关系组合为复杂界面;组件逻辑位于 JavaScript 中,而不是被限制在某种模板文件中。
组件组合的触发条件是父组件创建或更新子组件,以及组件自身状态或输入发生变化。数据沿组件关系传递,组件树最终交给 Web 或原生渲染环境处理;具体的状态管理边界和副作用写法需要依据官方学习文档与 API 参考确定。
JSX 语法
JSX 是一种类似 HTML 的 JavaScript 语法扩展,用于更直观地编写元素层级和属性。它不是使用 React 的必要条件,但 README 说明 JSX 可以提升代码可读性,并且需要经过构建工具或编译步骤转换。
在资料提供的示例中,createRoot 来自 react-dom/client,组件函数接收对象解构形式的属性并返回 JSX,最后通过根节点的 render 方法将组件挂载到页面容器。示例依赖浏览器页面中的 container 元素,资料未提供完整 HTML 文件和具体构建工具配置。
渐进式采用与跨环境渲染
README 将渐进式采用列为 React 的设计方向:项目可以按需要引入少量或较多 React 能力。对于 Web,资料展示了 react-dom/client 的客户端根节点 API;对于服务端,README 指向 Node;对于移动应用,README 指向 React Native。
这些环境并不意味着所有包和 API 都完全相同。React 核心、Web 渲染器、服务端渲染相关包和 React Native 之间存在职责边界,应用应根据目标运行环境选择对应官方文档,而不能仅凭核心包推断完整运行方式。
系统架构与关键模块
从仓库的 package.json 可以确认,这是一个使用 Yarn Workspaces 管理多个工作区包的 React 核心仓库。仓库同时包含源代码构建、不同发布渠道、测试、静态检查、类型检查和编译器相关脚本,因此它的工程架构明显区别于单一业务应用。
工作区与包组织
根配置的 workspaces 值为 packages/*,表示工作区包位于根目录下的 packages 子目录中。资料没有列出该目录当前的完整包清单,因此不能据此虚构每个包的目录名或包间依赖关系。
从构建脚本的入口名称可以确认,仓库涉及 react、react-dom、react-is、scheduler、react-test-renderer、react-refresh、react-art 以及编译器运行时等模块。这里的入口名称来自 package.json 脚本参数,不代表资料提供了每个模块的完整 API 说明。
构建与发布渠道
build 脚本调用 scripts/rollup/build-all-release-channels.js,说明仓库使用 Rollup 构建多个发布渠道。其他脚本还显式区分 NODE、NODE_DEV、NODE_PROD、ESM_PROD 和 NODE_ES2015 等构建类型。
构建渠道会影响输出目标和测试选择。例如,test-stable 使用 stable 发布渠道,test-www、test-classic 与开发工具或实验性构建使用不同脚本。仓库资料未给出各构建产物的文件大小、兼容性矩阵或发布流程的完整规范,相关结论应以最新仓库文档为准。
测试、静态检查与类型检查
根脚本通过 scripts/jest/jest-cli.js 统一调用 Jest 测试入口,并提供 stable、www、classic、开发工具和 DOM fixture 等不同测试命令。lint 调用内部 ESLint 任务,flow 与 flow-ci 调用 Flow 检查脚本,prettier-check 用于格式校验。
这种分层意味着代码验证不只有单元测试:构建产物、代码风格、Flow 类型信息和不同发布渠道都可能成为贡献检查的一部分。具体测试选择取决于修改范围,仓库提供的资料没有给出每个测试目录与测试命令之间的完整映射。
依赖与运行环境
根据根目录 package.json,仓库声明为私有工作区项目,开发依赖包括 Babel、Rollup、TypeScript、Flow、ESLint、Prettier、Jest、Hermes Parser 和若干构建辅助工具。这里的依赖主要服务于 React 核心的开发、构建和测试,不等同于普通应用的生产依赖清单。
资料中明确出现的运行环境线索包括 Node 链接、Yarn Workspaces、JavaScript、TypeScript 工具链以及 Flow 工具链。package.json 没有提供 engines 字段,README 资料也没有给出 Node.js、Yarn、操作系统或浏览器的最低版本,因此这些版本信息应留白。
- 语言:GitHub 元信息标注为 JavaScript。
- 工作区:根配置使用
packages/*。 - 构建:使用 Rollup 及 Babel 相关插件。
- 测试:使用 Jest 及
jest-environment-jsdom等开发依赖。 - 类型与语法工具:同时出现 Flow、TypeScript、Hermes Parser 与 Babel 相关依赖。
快速开始:安装、运行与验证
以下闭环针对仓库自身的本地开发与验证,而不是为生产应用生成脚手架。命令均来自根目录 package.json 中的脚本或基于仓库地址的本地克隆操作;资料未提供固定 Node.js 或 Yarn 版本,因此不在命令中虚构版本约束。
安装依赖
git clone https://github.com/react/react.git
cd react
yarn installyarn install 用于安装根配置及工作区所需依赖。仓库的 postinstall 脚本会调用 scripts/flow/createFlowConfigs.js,因此安装阶段可能包含 Flow 配置生成;资料未给出该脚本的详细输出。
执行构建与测试验证
yarn build
yarn test-stableyarn build 对应所有发布渠道的构建入口,yarn test-stable 对应稳定发布渠道测试。测试和构建均在本地执行,不需要访问未授权目标,也不要求填写 API 密钥、端口或外部服务地址。
最小可运行示例
下面的 JSX 示例直接取自 README 的核心用法。它展示的是应用层代码,不是 React 仓库自身的完整启动配置;要在浏览器中运行,还需要一个能够处理 JSX、提供 react 与 react-dom 包的项目环境,资料没有指定具体脚手架。
import { createRoot } from 'react-dom/client';
function HelloMessage({ name }) {
return <div>Hello {name}</div>;
}
const root = createRoot(document.getElementById('container'));
root.render(<HelloMessage name="Taylor" />);验证条件是页面中存在一个 ID 为 container 的元素,并且代码经过支持 JSX 的构建流程处理。示例的可见结果是向该容器渲染 Hello Taylor;README 没有提供 HTML 文件、开发服务器端口或打包命令,因此这些内容不应由本文补写。
配置说明
根配置主要面向 React 仓库的开发流程,而不是业务应用运行时配置。下表只列出资料中真实出现的字段;没有依据的默认值明确标记为“未提供”,避免把工具默认行为误写成项目承诺。
| 字段名 | 类型 | 默认值 | 作用 |
|---|---|---|---|
private |
boolean | true |
将根项目标记为私有项目,避免把根工作区作为普通 npm 包直接发布。 |
workspaces |
string[] | ["packages/*"] |
声明工作区包的匹配路径。 |
devDependencies |
object | 未提供 | 声明 Babel、Rollup、Jest、Flow、TypeScript、ESLint 等开发工具及其版本范围。 |
jest.testRegex |
string | "/scripts/jest/dont-run-jest-directly\\.js$" |
指定 Jest 配置中的测试匹配表达式;根配置要求通过仓库脚本入口运行测试。 |
scripts.build |
string | "node ./scripts/rollup/build-all-release-channels.js" |
构建所有发布渠道的入口命令。 |
scripts.test |
string | "node ./scripts/jest/jest-cli.js" |
调用仓库自定义 Jest 命令行入口。 |
scripts.lint |
string | "node ./scripts/tasks/eslint.js" |
执行仓库的 ESLint 检查任务。 |
scripts.flow |
string | "node ./scripts/tasks/flow.js" |
执行 Flow 检查任务。 |
资料没有提供 .env.example、Docker Compose、HTTP 端口、数据库连接、日志级别或生产配置文件。官方仓库未提供该信息,建议以最新 README 和仓库脚本为准。
进阶用法
进阶使用的重点是根据修改目标选择构建和测试渠道,而不是直接修改生成产物。仓库脚本允许开发者分别验证稳定渠道、网站渠道、经典渠道、开发工具构建和实验性能力。
yarn build-for-devtools:构建开发工具相关入口,脚本中包含 React、React DOM、Scheduler、测试渲染器和刷新相关模块。yarn build-for-devtools-dev:以开发工具开发构建类型调用前一个构建流程。yarn build-for-devtools-prod:以开发工具生产构建类型调用前一个构建流程。yarn build-for-flight-dev与yarn build-for-flight-prod:使用实验性发布渠道构建 Flight 相关入口,具体能力边界需以当前源码和文档为准。yarn test-www、yarn test-classic:分别执行资料中声明的网站现代渠道和经典渠道测试。
贡献者可以使用 yarn prettier 格式化变更文件,使用 yarn prettier-all 格式化全部适用文件,并使用 yarn prettier-check 执行检查。若修改涉及类型、构建或发布逻辑,应结合 yarn flow、yarn lint 和相应测试脚本验证,而不是只依赖单一测试命令。
可观测性与运维
仓库资料明确提供的是构建、测试、静态检查和错误码提取脚本,没有提供生产监控、指标采集、日志格式、健康检查接口或 SLA。React 作为用户界面库,本身也不等于一套完整的应用运维系统。
对仓库开发过程而言,可执行的验证信号包括构建命令退出状态、Jest 测试结果、ESLint 检查结果、Flow 检查结果和格式检查结果。对于基于 React 构建的业务应用,前端错误上报、性能指标、服务端日志和发布回滚策略应由应用及其部署系统单独设计,官方仓库未提供统一配置。
安全与合规边界
React 的资料定位是构建用户界面的 JavaScript 库,未显示其提供爬虫、渗透、账号自动化、支付处理或绕过检测能力。因此,本文不提供面向未授权目标的操作教程,也不把 React 的渲染能力描述为安全防护方案。
使用 React 构建包含个人信息、身份凭证或业务数据的应用时,开发团队仍需自行负责数据最小化、访问控制、依赖审查、机密信息隔离和适用法律法规评估。仓库资料没有给出特定合规认证、CVE 清单、SLA 或隐私数据处理承诺;这些事项不能从 MIT 许可证或 Star、Fork 数量推导。
- 仅在拥有授权的本地、测试或生产环境中部署和验证应用。
- 不要把 API 密钥、访问令牌或个人数据硬编码进 JSX、组件属性或公开仓库。
- 将 React 核心、渲染器和应用自身依赖分别纳入版本审查与更新流程。
- 对于服务端渲染、移动端数据访问和第三方服务集成,分别建立数据流和权限边界。
许可证与商用条款
根据仓库中的 LICENSE 文件,React 采用 MIT License,版权声明为 Meta Platforms, Inc. and affiliates。MIT 文本授予获得软件及相关文档的人员使用、复制、修改、合并、发布、分发、再许可和销售软件副本的许可,但必须满足许可证列明的条件。
因此,在许可证文本允许的范围内,React 可以用于商业软件;分发软件或其重要组成部分时,应保留版权声明和许可声明。许可证同时明确软件按“原样”提供,不提供明示或默示保证,作者或权利人对相关损害承担责任的范围以许可证文本为准。
商用项目仍需独立审核自身交付物中的第三方依赖、商标使用、隐私和行业监管要求。本文不扩展 MIT License 未写明的授权或免责内容,具体分发义务以仓库 LICENSE 为准。
局限性与已知限制
React 核心仓库解决的是用户界面库及其工程实现问题,并不直接提供完整后端、数据库、认证、支付、业务监控或部署平台。README 只说明可以逐步采用 React,并指向 Web、Node 和 React Native 相关资料,没有承诺某种固定应用架构。
- 缺少固定应用脚手架:根仓库的 package.json 是核心开发仓库配置,不是面向业务项目的完整模板。
- 运行环境信息不完整:资料未提供 Node.js、Yarn、浏览器或操作系统的最低版本。
- 构建细节复杂:多个发布渠道和构建类型意味着核心贡献需要理解仓库脚本,而不是只运行一个通用打包命令。
- 性能数据缺失:资料未提供 Benchmark、吞吐量、首屏时间、内存占用或并发规模,不能据此作性能承诺。
- API 范围需查文档:README 提供了入门、教程、状态管理、逃生舱、API 参考等入口,但未在仓库资料中展开完整 API 签名。
根据本文作者的经验判断,如果团队需要的是带有认证、数据层、部署和监控约束的完整应用平台,仅引入 React 本身不能覆盖这些职责。替代工具的选择必须结合官方资料、现有技术栈和项目约束,本文不对资料未提及的方案作比较。
适合谁
以下信号表明项目与 React 的定位较匹配,判断依据集中在用户界面复杂度、组件复用需求和渐进式引入能力,而不是仓库受欢迎程度。
- 界面包含多个交互状态,需要根据数据变化重新计算视图。
- 团队希望把界面拆分为可封装、可组合并能传递数据的组件。
- 项目已有 JavaScript 技术栈,并愿意采用 JSX 或相应的 JavaScript 编译流程。
- 团队需要在既有项目中逐步加入界面能力,而不是一次性替换所有前端代码。
- 团队愿意通过测试、静态检查、构建渠道和文档学习维护组件系统。
不适合谁
以下信号说明仅使用 React 不能满足项目的主要目标,或会引入超出当前资料范围的额外工程责任。这里的“不适合”指 React 单独无法覆盖需求,并不代表其不能作为更大系统的一部分。
- 项目只需要静态文档或固定 HTML,且没有组件状态与交互需求。
- 团队要求一个内置数据库、认证、支付、后台任务和运维控制台的完整后端平台。
- 项目无法接受 JavaScript、JSX 或构建步骤,而现有环境只允许直接交付静态模板。
- 团队要求明确的性能基准、SLA 或特定合规认证,但供应链审查尚未完成。
- 维护者不准备区分 React 核心、渲染器、应用依赖及不同发布渠道的职责。
常见问题与排查(FAQ / Troubleshooting)
排查 React 仓库问题时,首先应确认执行位置、依赖安装状态和脚本入口。根 package.json 明确要求通过仓库脚本调用构建和 Jest,而不是直接按照普通单包项目的方式运行任意命令。
Q1:安装后应从哪里开始验证
从仓库根目录执行 yarn build 和 yarn test-stable。如果命令失败,应保留完整终端输出,并确认工作区依赖已经由 yarn install 安装;具体错误的修复方式需要结合当前提交和环境信息判断。
Q2:为什么不能直接运行 JSX 示例
JSX 需要经过项目构建流程处理,示例还依赖 react-dom/client 和页面中的 container 元素。README 没有指定统一的开发服务器、打包器、端口或 HTML 模板,因此应将示例放入已配置 React 的应用中,不能从本文推导一个未提供的启动命令。
Q3:如何选择测试命令
默认 yarn test 调用仓库 Jest 入口,yarn test-stable 专门指定稳定发布渠道。涉及网站现代渠道、经典渠道、开发工具构建或 DOM fixture 时,应根据修改范围选择 yarn test-www、yarn test-classic、yarn test-build-devtools 或 yarn test-dom-fixture。
Q4:仓库是否提供固定端口和环境变量
资料没有提供固定端口、环境变量或 .env 示例。官方仓库未提供该信息,建议以最新 README、脚本实现和具体应用文档为准,不要把其他项目的默认配置复制到 React 核心仓库。
Q5:如何参与贡献
README 提供了贡献指南、行为准则和 Good First Issue 入口。贡献前应阅读构建与测试说明,并根据改动范围执行相关检查;如果问题涉及仓库当前未说明的内部流程,应以贡献指南和最新 GitHub 页面为准。
项目结构与维护建议
资料可以确认的关键路径集中在 packages/*、scripts/rollup、scripts/jest、scripts/tasks、scripts/flow、scripts/prettier 和 scripts/react-compiler。这些路径来自 package.json 中的工作区配置和脚本命令,不能据此声称仓库的全部目录都已覆盖。
- 先阅读根目录 README 和 package.json,确认修改目标属于运行时、构建、测试还是开发工具范围。
- 修改工作区代码后,优先执行与变更相关的局部验证,再执行稳定渠道测试。
- 涉及构建入口时,检查对应发布渠道,而不要只验证开发环境输出。
- 提交前执行格式和静态检查,并在变更说明中记录实际执行过的命令。
根据本文作者的经验判断,对 React 核心仓库的维护应重视“改动范围—构建渠道—测试入口”的对应关系。没有资料支持时,不应根据常见前端项目经验新增目录、配置文件或发布流程。
版本、分支与仓库元信息
当前资料给出的默认分支为 main,仓库地址为 https://github.com/react/react,GitHub 元信息中的语言为 JavaScript,许可证为 MIT。Star 和 Fork 是资料提供的仓库快照数据,分别为 247242 和 51246,不应被解读为质量、性能、支持周期或服务等级承诺。
package.json 中出现了大量开发依赖版本范围,例如 Babel、TypeScript、Jest、Rollup 和 Flow 相关依赖;这些是仓库资料中的开发配置,不构成本文对最新发布版本的判断。资料没有给出 React 当前 npm 发布版本,官方仓库未提供该信息,建议以最新 README 和官方 npm 页面为准。
项目地址与资源
下面列出资料中出现的仓库、文档、贡献和相关官方站点。链接锚文本使用页面或项目名称,便于读者判断目标内容。



