React 编译器 RC

news2025/6/1 19:42:10

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于表连接

目录 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…

Word表格怎样插入自动序号或编号

在Word文档中编辑表格时,经常需要为表格添加序号或编号,可以设置为自动序号或编号,当删除行时,编号会自动变化,不用手工再重新编号。如图所示。 序号数据1数据21300300230030033003004300300 一,建立word表…

无人机仿真环境(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集群存储高频访问数据(如用户登录态、实时交易数据),配合…

Qt/C++开发监控GB28181系统/sip协议/同时支持udp和tcp模式/底层协议解析

一、前言说明 在gb28181-2011协议中&#xff0c;只有udp要求&#xff0c;从2016版本开始要求支持tcp&#xff0c;估计也是在多年的实际运行过程中&#xff0c;发现有些网络环境差的场景下&#xff0c;一些udp交互指令丢失导致功能异常&#xff0c;所以后面修订的时候增加了tcp…

晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册

晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册 CK-FR03-TCP是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯协…

t014-项目申报管理系统 【springBoot 含源码】

项目演示视频 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;项目信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行…

Go语言开发的GMQT物联网MQTT消息服务器(mqtt Broker)支持海量MQTT连接和快速低延时消息传输-提供源码可二次开发定制需求

关于GMQT物联网MQTT消息平台 GoFly社区推出《GMQT物联网MQTT消息平台》&#xff0c;完全使用高性能的Go语言编写&#xff0c;内嵌数据库(不依赖三方库)&#xff0c; 全面支持MQTT的v3.0.0、v3.1.1以及完全兼容 MQTT v5 功能。利用Go语言高并发性、高效利用服务器资源、跨平台支…

leetcode2221. 数组的三角和-medium

1 题目&#xff1a;数组的三角和 官方标定难度&#xff1a;中 给你一个下标从 0 开始的整数数组 nums &#xff0c;其中 nums[i] 是 0 到 9 之间&#xff08;两者都包含&#xff09;的一个数字。 nums 的 三角和 是执行以下操作以后最后剩下元素的值&#xff1a; nums 初始…

Express教程【001】:Express创建基本的Web服务器

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

asio之async_result

简介 async_result用来表示异步处理返回类型 async_result 是类模板 type&#xff1a;为类模板中声明的类型&#xff0c;对于不同的类型&#xff0c;可以使用类模板特例化&#xff0c;比如针对use_future

代码随想录算法训练营 Day60 图论Ⅹ Bellmen_ford 系列算法

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

独立机构软件第三方检测:流程、需求分析及电商软件检验要点?

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

华为FreeArc能和其他华为产品共用充电线吗?

最近刚买的FreeArc终于到手啦&#xff0c;看到网上有朋友说&#xff0c;这次的耳机是不附带充电线&#xff0c;开箱后发现果真如此&#xff0c;那FreeArc到底用什么规格的充电线&#xff0c;能不能和华为的Type-C数据线通用&#xff0c;我来给大家解答一下吧&#xff01; Free…

[网页五子棋][匹配模式]创建房间类、房间管理器、验证匹配功能,匹配模式小结

文章目录 创建房间类创建房间类实现房间管理器 实现匹配器(3)验证匹配功能问题&#xff1a;匹配按钮不改变验证多开 小结 创建房间类 LOL&#xff0c;通过匹配的方式&#xff0c;自动给你加入到一个房间&#xff0c;也可手动创建游戏房间 这一局游戏&#xff0c;进行的“场所…

实验设计与分析(第6版,Montgomery)第3章单因子实验:方差分析3.11思考题3.7 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第3章单因子实验&#xff1a;方差分析3.11思考题3.7 R语言解题。主要涉及单因子方差分析&#xff0c;正态性假设检验&#xff0c;残差与拟合值的关系图&#xff0c;平方根变换。 X<-c(…