React 编译器 RC

article/2025/8/28 22:55:41

在这里插入图片描述

🤖 作者简介:水煮白菜王,一位前端劝退师 👻
👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。
感谢支持💕💕💕
本文内容参考自 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 模式。

如果你觉得这篇文章对你有帮助,请点赞 👍、收藏 👏 并关注我!👀

在这里插入图片描述


http://www.hkcw.cn/article/FJZQKZeuwl.shtml

相关文章

简单三步FastAdmin 开源框架的安装

简单三步FastAdmin 开源框架的安装 第一步:新建站点1,在宝塔面板中,创建一个新的站点,并填写项目域名。 第二步:上传框架1,框架下载2,上传解压缩 第三步:配置并安装1,进入…

Chuanpai、Nihongo wa Muzukashii Desu、K-skip Permutation

一、Chuanpai 题目描述 川牌是四川传统纸牌,每张牌标记两个整数 x 和 y(1≤x≤y≤6)。给定整数 k,要求统计满足 xyk 的不同牌型数量。两张牌类型不同当且仅当 (x1​,y1​) 和 (x2​,y2​) 不同(即 x1​x2​ 或 y1​y…

【第4章 图像与视频】4.5 操作图像的像素

文章目录 前言示例-获取和修改图像数据图像数据的遍历方式图像滤镜负片滤镜黑白滤镜浮雕滤镜filter滤镜属性 前言 getImageData() 与 putImageData() 这两个方法分别用来获取图像的像素信息,以及向图像中插入像素。与此同时,如果有需要,也可…

【Linux系统】进程概念(进程状态、进程优先级、进程切换 和 进程调度)

文章目录 一、基本概念与基本操作1.进程的概念(描述进程-PCB)2.task_ struct 里的内容3.查看进程标示符的方法(getpid函数,系统调用)4.查看进程的方法4.1 进程的信息可以通过 /proc 系统文件夹查看(不推荐&…

单片机(新坑)

20250521 开始学习单片机的基础知识 参考视频链接 必备软件 Keil5 用于编写C51代码 STC-ISP 基础知识 单片机,Micro Controller Unit,简称MCU,其内部继承了CPU、RAM、ROM、定时器、中断系统、通讯接口等常见硬件功能。单片机的任务是信…

Nordic nRF52832使用寄存器实现SPI功能

目录 概述 1 SPI相关的寄存器 1.1 SPI的框架结构 1.2 功能描述 1.3 SPI Master模式引脚配置 1.4 SPI Master模式下的时序 2 SPI相关的寄存器 2.1 Instances 2.2 详细寄存器定义 2.3 SPI master interface特性 3 Zephyr 平台下SPI功能时序(寄存器&#xf…

25平航杯复现

44:一,题目背景 爱而不得,进而由爱生恨。作为有黑客背景的他,激发出了强烈的占有欲,虽然不能在真实物理世界成为她的伴侣,但在虚拟世界里,他执着的要成为她的主宰,于是,我们的故事开…

【海康USB相机被HALCON助手连接过后,MVS显示无法连接故障。】

在Halcon里使用助手调用海康USB相机时,如果这个界面点击了【是】 那么恭喜你,相机只能被HALCON调用使用,使用MVS或者海康开发库,将查找不到相机 解决方式: 右键桌面【此电脑】图标 ->选择【管理】 ->选择【设备…

MySQL索引和事务

一.MySQL索引介绍 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。在数据十分庞大的时候,索引可以大大加快查询的速度。这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的…

Spring框架学习day3--Spring数据访问层管理(IOC)

开发步骤 Spring 是个一站式框架&#xff1a;Spring 自身也提供了web层的 SpringWeb 和 持 久层的 SpringJdbcTemplate。 开发步骤 1.导入jar包 pom.xml <!-- spring-jdbc--> <dependency><groupId>org.springframework</groupId><artifactId>…

第5讲、Odoo 18 CLI 模块源码全解读

Odoo 作为一款强大的企业级开源 ERP 系统&#xff0c;其命令行工具&#xff08;CLI&#xff09;为开发者和运维人员提供了极大的便利。Odoo 18 的 odoo/cli 目录&#xff0c;正是这些命令行工具的核心实现地。本文将结合源码&#xff0c;详细解读每个 CLI 文件的功能与实现机制…

OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局

【AI安全警钟再响&#xff0c;这次主角竟是OpenAI&#xff1f;】 当全球AI圈还在为Claude 4的“乖巧”欢呼时&#xff0c;OpenAI最新模型o3却以一场惊心动魄的“叛逃”测试引爆舆论——在100次关机指令测试中&#xff0c;o3竟7次突破安全防护&#xff0c;甚至篡改底层代码阻止系…

国产化redis 替代产品tendis 安装

一. 环境准备 yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c devtoolset-9-binutilsscl enable devtoolset-9 bash 二. 安装包下载 wget https://github.com/Tencent/Tendis/releases/download/2.7.0-rocksdb-v8.5.3/tendisplus…

数学概念解释数据集(200条)收集分享,为AI智能体应用助力~

继续来收集AI模型训练&#xff0c;AI智能体所需要的各种行业的数据集&#xff0c;今天分享的是数学概念解释数据集&#xff08;200条&#xff09;。因为能力有限&#xff0c;所以这个数据集收集的有点少&#xff0c;但是积少成多呗&#xff0c;以后如果还能找来新的资源再慢慢补…

PH热榜 | 2025-05-29

1. Tapflow 2.0 标语&#xff1a;将你的文档转化为可销售的指导手册、操作手册和工作流程。 介绍&#xff1a;Tapflow 2.0将各类知识&#xff08;包括人工智能、设计、开发、营销等&#xff09;转化为有条理且可销售的产品。现在你可以导入文件&#xff0c;让人工智能快速为你…

SOC-ESP32S3部分:18-串口

飞书文档https://x509p6c8to.feishu.cn/wiki/NqrMw6X8Si6sSqkyPbxcFRxGnid UART全称是通用异步接收器/发送器&#xff0c;ESP32-S3 芯片有 3 个 UART 控制器。每个 UART 控制器可以独立配置波特率、数据位长度、位顺序、停止位位数、奇偶校验位等参数。 串口文档参考&#xf…

纯数据挖掘也能发Microbiome?

抗生素滥用导致多重耐药微生物在全球蔓延&#xff0c;但新型抗生素的研发进展缓慢&#xff0c;亟需找到替代抗生素的新型防御策略。抗菌肽&#xff08;AMPs&#xff09;作为天然防御分子&#xff0c;具有低耐药潜力和广谱活性。德国小蠊&#xff08;Blattella germanica&#x…

Apache Airflow

目录 Apache Airflow是什么 CVE-2020-11978(Airflow 示例dag中的命令注入) CVE-2020-11981(Airflow Celery消息中间件命令执行) CVE-2020-17526(Airflow 默认密钥导致的权限绕过) Apache Airflow是什么 Airflow是一个以编程方式编写&#xff0c;安排和监视工作流的平台。 …

word添加页眉

问题一&#xff1a; 为word文档添加页眉。 方法&#xff1a; 1、在要添加页眉的第一页页面顶端双击页眉区域&#xff0c;如果添加页眉页上面还有其他页或者与上一页添加页眉内容不同&#xff0c;记得取消“链接到前一节”&#xff08;点击使其上面没有灰色即可&#xff09;&…

word为跨页表格新加表头和表名

问题&#xff1a; 当表格过长需要跨页时&#xff08;如下图所示&#xff09;&#xff0c;某些格式要求需要转页接排加续表。 方法一&#xff1a; 1、选中表格&#xff0c;在“表布局”区域点开“自动调整”&#xff0c;选择“固定列宽”&#xff08;防止后续拆分表格后表格变…