React 编译器 RC
🤖 作者简介:水煮白菜王,一位前端劝退师 👻
👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。
感谢支持💕💕💕
本文内容参考自 React博客 - React Compiler RC 内容进行记录和整理✍
目录
- React 编译器 RC
- 使用 React Compiler RC
- 反馈 issue
- 向后兼容性
- 从 eslint-plugin-react-compiler 迁移到 eslint-plugin-react-hooks
- SWC 支持(实验性)
- 升级 React 编译器
- 稳定版路线
- 如果你觉得这篇文章对你有帮助,请点赞 👍、收藏 👏 并关注我!👀
React 编译器 RC
2025 年 4 月 21 日 React 官方分享了新的更新公告:
发布了 React Compiler RC,为编译器的稳定版本做准备。
正在合并到 .eslint-plugin-react-compilereslint-plugin-react-hooks
添加了对 swc 的支持,并正在与 oxc 合作以支持无 Babel 构建。
React Compiler 是一个构建时工具,它通过自动记忆来优化React 应用程序。去年,React发布了 React Compiler 的 第一个 beta 版 ,收到了很多很棒的反馈和贡献。React对采用编译器的开发者们所取得的胜利感到兴奋(参见 Sanity Studio 和 Wakelet 的案例研究),并正在努力实现稳定版本。
使用 React Compiler RC
安装 RC
npm
npm install --save-dev --save-exact babel-plugin-react-compiler@rc
pnpm
pnpm add --save-dev --save-exact babel-plugin-react-compiler@rc
yarn
yarn add --dev --exact babel-plugin-react-compiler@rc
作为 RC 的一部分,官方一直在使 React Compiler 更容易添加到你的项目中,并优化了编译器生成记忆的方式。React Complier 现在支持可选的链和数组索引作为依赖项。React正在研究如何推断更多的依赖项,例如相等检查和字符串插值。这些改进最终会减少重新渲染次数并提高 UI 的响应速度。
React还从社区中听说,ref-in-render 验证有时会出现误报。由于作为一般理念,希望大家能够完全信任编译器的错误消息和提示,因此官方现在默认将其关闭。将继续努力改进此验证,并将在后续版本中重新启用它。
可以在React博客文档 中找到有关使用 Compiler 的更多详细信息。
反馈 issue
在 RC 期间,鼓励所有 React 用户尝试编译器,并在 React 仓库中提供反馈。如果您遇到任何错误或意外行为,请打开一个 Issue 。如果你有一般性的问题或建议,请在 React 编译器工作组 中发布。
向后兼容性
正如 编辑器 Beta 版公告中所指出的,React Compiler 与 React 17 及更高版本兼容。如果你还没有使用 React 19,你可以通过在编译器配置中指定最小目标并添加为依赖项来使用 React 编译器。您可以找到相关文档 。react-compiler-runtime
从 eslint-plugin-react-compiler 迁移到 eslint-plugin-react-hooks
如果你已经安装了 eslint-plugin-react-compiler,你现在可以删除它并使用 .(非常感谢 @michaelfaith 为这项改进做出了贡献)!eslint-plugin-react-hooks@6.0.0-rc.1
安装 :
npm
npm install --save-dev eslint-plugin-react-hooks@6.0.0-rc.1
pnpm
pnpm add --save-dev eslint-plugin-react-hooks@6.0.0-rc.1
yarn
yarn add --dev eslint-plugin-react-hooks@6.0.0-rc.1
// eslint.config.js
import * as reactHooks from 'eslint-plugin-react-hooks';export default [// Flat Config (eslint 9+)reactHooks.configs.recommended,// Legacy ConfigreactHooks.configs['recommended-latest']
];
要启用 React 编译器规则,请添加到你的 ESLint 配置中。'react-hooks/react-compiler': 'error'
linter 不需要安装编译器,因此升级 eslint-plugin-react-hooks 没有风险。建议大家尽快就升级。
SWC 支持(实验性)
React Compiler 可以安装在多种构建工具上,例如 Babel、Vite 和 Rsbuild。
除了这些工具之外,React还与 swc 团队的 Kang Dongyoon 合作,将 React Compiler 作为 swc 插件添加额外的支持。虽然这项工作尚未完成,但当在 Next.js 应用程序中启用 React Compiler 时,Next.js构建性能现在应该会快得多。
建议使用 Next.js 15.3.1 或更高版本,以获得最佳构建性能。
Vite 用户可以继续使用 vite-plugin-react 来启用编译器,方法是将其添加为 Babel 插件。React还与 oxc团队合作,以添加对编译器的支持。一旦 rolldown正式发布并在 Vite 中得到支持,并且为 React 编译器添加了 oxc 支持,将更新文档,提供有关如何迁移的信息。
升级 React 编译器
React Compiler 在应用自动记忆严格为了性能时效果最好。编译器的未来版本可能会改变 memoization 的应用方式,例如它可能会变得更加细致和精确。
但是,由于产品代码有时可能会以在 JavaScript 中并不总是静态可检测到的方式打破 React 的规则,因此更改记忆化偶尔会产生意想不到的结果。例如,以前记忆的值可能用作组件树中某个位置的 useEffect 的依赖项。更改此值的记忆方式或记忆方式可能会导致该 useEffect 触发过度或不足。虽然鼓励仅将 useEffect 用于同步,但您的代码库可能具有涵盖其他用例的 useEffects,例如只需要在响应特定值更改时运行的效果。
换句话说,在极少数情况下,更改记忆可能会导致意外行为。因此,建议遵循 React 规则并对您的应用程序进行持续的端到端测试,以便您可以放心地升级编译器并识别任何可能导致问题的 React 违规规则。
如果您没有良好的测试覆盖率,建议将编译器固定到确切的版本 (eg ) 而不是 SemVer 范围 (eg )。您可以在升级编译器时通过传递 (npm/pnpm) 或 flags (yarn) 来实现此目的。然后,您应该手动对编译器进行任何升级,并注意检查您的应用程序是否仍按预期工作。19.1.0^19.1.0--save-exact--exact
稳定版路线
这不是最终路线图,可能会发生变化。
在社区对 RC 的最终反馈一段时间后,计划为编译器发布稳定版本。
-
✅ 实验性:在 React Conf 2024 上发布,主要针对应用程序开发人员的反馈。
-
✅ 公开测试版:现已推出,以收集库作者的反馈。
-
✅ 候选版本(RC):React 编译器适用于大多数遵循规则的应用程序和库,没有问题。
-
正式发布:在社区的最终反馈期之后。
在 Post-Stable 后,计划添加更多的编译器优化和改进。这包括对自动记忆化的持续改进,以及完全新的优化,对产品代码的更改最小甚至没有变化。每次升级都会继续提高性能,并更好地处理各种 JavaScript 和 React 模式。
如果你觉得这篇文章对你有帮助,请点赞 👍、收藏 👏 并关注我!👀
相关文章:

React 编译器 RC
🤖 作者简介:水煮白菜王,一位前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&#…...
PyTorch 中mm和bmm函数的使用详解
torch.mm 是 PyTorch 中用于 二维矩阵乘法(matrix-matrix multiplication) 的函数,等价于数学中的 A B 矩阵乘积。 一、函数定义 torch.mm(input, mat2) → Tensor执行的是两个 2D Tensor(矩阵)的标准矩阵乘法。 in…...

关于表连接
目录 1.左连接 2.右连接 3.内连接 4.全外连接 5.笛卡尔积 -- 创建表A CREATE TABLE A(PNO VARCHAR2(10) PRIMARY KEY, PAMT NUMBER, A_DATE DATE);-- 向表A插入数据 INSERT INTO A VALUES (01001, 100, TO_DATE(2005-01-01, YYYY-MM-DD)); INSERT INTO A VALUES (010…...

【计算机网络】fork()+exec()创建新进程(僵尸进程及孤儿进程)
文章目录 一、基本概念1. fork() 系统调用2. exec() 系列函数 二、典型使用场景1. 创建子进程执行新程序2. 父子进程执行不同代码 三、核心区别与注意事项四、组合使用技巧1. 重定向子进程的输入/输出2. 创建多级子进程 五、常见问题与解决方案僵尸进程(Zombie Proc…...
QPS 和 TPS 详解
QPS 和 TPS 是性能测试中的两个核心指标,用于衡量系统的吞吐能力,但关注点不同。以下是具体解析: 1. QPS(Queries Per Second) 定义:每秒查询数,表示系统每秒能处理的请求数量(无论…...

Word表格怎样插入自动序号或编号
在Word文档中编辑表格时,经常需要为表格添加序号或编号,可以设置为自动序号或编号,当删除行时,编号会自动变化,不用手工再重新编号。如图所示。 序号数据1数据21300300230030033003004300300 一,建立word表…...
数据结构:导论
目录 什么是“第一性原理”? 什么是“数据结构”? 数据结构解决的根本问题是什么? 数据结构的两大分类 数据结构的基本操作 数据结构与算法的关系 学习数据结构的底层目标 什么是“第一性原理”? 在正式进入数据结构之前&…...
青少年编程与数学 02-020 C#程序设计基础 13课题、数据访问
青少年编程与数学 02-020 C#程序设计基础 13课题、数据访问 一、使用数据库1. 使用ADO.NET连接数据库连接SQL Server示例连接其他数据库 2. 使用Entity Framework (EF Core)安装EF Core示例代码 3. 数据绑定到WinForms控件DataGridView绑定简单控件绑定 4. 使用本地数据库(SQLi…...

无人机仿真环境(3维)附项目git链接
项目概述 随着无人机技术在物流、测绘、应急救援等领域的广泛应用,其自主导航、避障算法、路径规划及多机协同等核心技术的研究需求日益迫切。为降低实地测试成本、提高研发效率,本项目旨在构建一个高精度、可扩展的无人机三维虚拟仿真环境&…...
湖北理元理律师事务所:债务优化中的“生活锚点”设计
在债务重组领域,一个常被忽视的核心矛盾是:还款能力与生存需求的冲突。过度压缩生活支出还债,可能导致收入中断;放任债务膨胀,又加剧精神压力。湖北理元理律师事务所通过“三步平衡法”,尝试在法理框架内破…...

Python 训练营打卡 Day 30-模块和库的导入
模块和库的导入 1.1标准导入 import mathprint("方式1: 使用 import math") print(f"圆周率π的值: {math.pi}") print(f"2的平方根: {math.sqrt(2)}\n") 1.2从库中导入特定项 from math import pi, sqrtprint("方式2:使用 f…...

前端实现图片压缩:基于 HTML5 File API 与 Canvas 的完整方案
在 Web 开发中,处理用户上传的图片时,前端压缩可以有效减少服务器压力并提升上传效率。本文将详细讲解如何通过<input type="file">实现图片上传,结合 Canvas 实现图片压缩,并实时展示压缩前后的图片预览和文件大小对比。 一、核心功能架构 我们将实现以…...

【Docker管理工具】部署Docker管理面板DweebUI
【Docker管理工具】部署Docker管理面板DweebUI 一、DweebUI介绍1.1 DweebUI 简介1.2 主要特点1.3 使用场景 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载DweebUI镜像五、…...

【后端高阶面经:架构篇】50、数据存储架构:如何改善系统的数据存储能力?
一、数据存储架构设计核心原则 (一)分层存储架构:让数据各得其所 根据数据访问频率和价值,将数据划分为热、温、冷三层,匹配不同存储介质,实现性能与成本的平衡。 热数据层:访问频率>100次/秒。采用Redis集群存储高频访问数据(如用户登录态、实时交易数据),配合…...
编程之巅:语言的较量
第一章:代码之城的召集令 在遥远的数字大陆上,有一座名为“代码之城”的神秘都市。这里居住着各种编程语言的化身,他们以拟人化的形态生活,每种语言都有独特的性格与技能。Python是个优雅的学者,C是个硬核战士&#x…...
STM32 通过 ESP8266 通信详解
✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进 ❤欢迎关注我的知乎:对error视而不见 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 🍎获取更多嵌入式资料可点击链接进群领…...

Qt/C++开发监控GB28181系统/sip协议/同时支持udp和tcp模式/底层协议解析
一、前言说明 在gb28181-2011协议中,只有udp要求,从2016版本开始要求支持tcp,估计也是在多年的实际运行过程中,发现有些网络环境差的场景下,一些udp交互指令丢失导致功能异常,所以后面修订的时候增加了tcp…...

晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册
晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册 CK-FR03-TCP是一款基于射频识别技术的高频RFID标签读卡器,读卡器工作频率为13.56MHZ,支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯协…...
山海鲸轻 3D 渲染技术深度解析:预渲染如何突破多终端性能瓶颈
在前期课程中,我们已系统讲解了山海鲸两大核心渲染模式——云渲染与端渲染的技术特性及配置方法。为满足复杂场景下的差异化需求,山海鲸创新推出轻3D渲染功能,本文将深度解析该技术的实现原理与操作实践。 一、轻3D功能研发背景 针对多终端协…...

t014-项目申报管理系统 【springBoot 含源码】
项目演示视频 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,项目信息因为其管理内容繁杂,管理数量繁多导致手工进行…...
阻止H5页面中键盘收起的问题
在移动端H5开发中,当输入框失去焦点时,键盘会自动收起,但有时我们需要阻止这种行为。以下是几种解决方案: 常见原因 输入框失去焦点触发键盘收起页面滚动或触摸其他区域导致键盘收起某些浏览器(特别是iOS Safari)的默认行为 解…...
将 AI 解答转换为 Word 文档
相关说明 DeepSeek 风靡全球的2025年,估计好多人都已经试过了,对于理科老师而言,有一个使用痛点,就是如何将 AI 输出的 mathjax 格式的符号转化为我们经常使用的 mathtype 格式的,以下举例说明。 温馨提示࿱…...
AI 产品的 MVP 构建逻辑:Prompt 工程 ≠ 产品工程?
一、引言:技术细节与系统工程的本质分野 在 AI 产品开发的战场中,Prompt 工程与产品工程的边界模糊正在引发深刻的认知革命。当工程师们沉迷于优化 “请用三段式结构分析用户需求” 这类提示词时,产品经理却在思考如何通过用户行为数据验证 …...

Go语言开发的GMQT物联网MQTT消息服务器(mqtt Broker)支持海量MQTT连接和快速低延时消息传输-提供源码可二次开发定制需求
关于GMQT物联网MQTT消息平台 GoFly社区推出《GMQT物联网MQTT消息平台》,完全使用高性能的Go语言编写,内嵌数据库(不依赖三方库), 全面支持MQTT的v3.0.0、v3.1.1以及完全兼容 MQTT v5 功能。利用Go语言高并发性、高效利用服务器资源、跨平台支…...
JavaScript es6 语法 map().filter() 链式调用,语法解析 和常见demo
摘要: map:遍历数组并对每个元素执行回调函数,返回一个新数组 filter:对 map 返回的数组进行过滤,返回满足条件的元素组成的新数组 1.数字数组处理 const numbers [1, 2, 3, 4, 5];// 先平方,再筛选偶数…...

leetcode2221. 数组的三角和-medium
1 题目:数组的三角和 官方标定难度:中 给你一个下标从 0 开始的整数数组 nums ,其中 nums[i] 是 0 到 9 之间(两者都包含)的一个数字。 nums 的 三角和 是执行以下操作以后最后剩下元素的值: nums 初始…...

Express教程【001】:Express创建基本的Web服务器
文章目录 1、初识express1.1 什么是Express1.2 主要特点1.3 Express的基本使用1.3.1 安装1.3.2 创建基本的Web服务器 1、初识express 目标: 能够使用express.static()快速托管静态资源能够使用express路由精简项目结构能够使用常见的express中间件能够使用express创…...

asio之async_result
简介 async_result用来表示异步处理返回类型 async_result 是类模板 type:为类模板中声明的类型,对于不同的类型,可以使用类模板特例化,比如针对use_future...

代码随想录算法训练营 Day60 图论Ⅹ Bellmen_ford 系列算法
图论 题目 94. 城市间货物运输 I Bellmen_ford 队列优化算法 SPFA 大家可以发现 Bellman_ford 算法每次松弛 都是对所有边进行松弛。 但真正有效的松弛,是基于已经计算过的节点在做的松弛。 本图中,对所有边进行松弛,真正有效的松弛&#…...

独立机构软件第三方检测:流程、需求分析及电商软件检验要点?
独立机构承担着对软件进行第三方检测的任务,这一环节对于提升软件的质量和稳定性起到了极其关键的作用。检测过程拥有一套完善的流程,目的在于确保检测结果的精确性,并保障软件达到高标准。 需求分析 确保软件测试需求清晰十分关键。我们需…...