2025年10月8日,React Native 团队正式推出 React Native 0.82 版本。这一版本堪称里程碑——它是首个完全基于新架构运行的 React Native 版本,标志着框架发展进入全新阶段。未来版本中,团队还将逐步移除旧架构的剩余代码,以减小安装体积、优化代码库结构。 此外,0.82 版本还带来了实验性的 Hermes V1 支持、React 19.1.1 版本更新,以及对 DOM Node APIs 的兼容,诸多亮点值得开发者深入了解。核心亮点速览
本次更新的核心特性围绕“新架构落地”与“性能体验升级”展开,主要包含四大方向:
仅支持新架构:新架构从默认变为唯一选项,旧架构相关配置将被忽略
实验性 Hermes V1:新一代 JavaScript 引擎,带来更优的加载与交互性能
React 19.1.1 集成:解锁完整 Owner Stacks 支持,修复核心 Hooks 行为
DOM Node APIs 支持:原生组件通过 Ref 提供类 DOM 节点,统一 Web 与原生开发体验
早在 React Native 0.76 版本中,新架构就已成为默认选项。经过多版本的测试与优化,0.82 版本正式将新架构设为唯一运行架构——即便开发者在配置中手动关闭新架构(如 Android 端设置newArchEnabled=false、iOS 端通过RCT_NEW_ARCH_ENABLED=0安装 CocoaPods),这些配置也会被忽略,应用仍将基于新架构运行。
如何迁移至新架构?
若尚未完成新架构迁移,建议按以下步骤操作:
先将项目升级至 React Native 0.81 或 Expo SDK 54(这两个版本是最后支持旧架构的版本,包含迁移专属警告与性能优化);
在 0.81 版本中启用新架构,验证应用功能正常;
确认功能无误后,即可安全升级至 0.82 版本(该版本会强制禁用旧架构)。
互操作层保留:为避免 breaking changes,代码库中的互操作层将在可预见的未来继续保留,相关类与函数暂不删除;
第三方库兼容:经团队验证,支持“新旧架构双向兼容”的第三方库,在 0.82 版本中可正常运行;
旧架构 API 暂不删除:0.82 版本未移除旧架构的核心 API(以保障向后兼容),旧架构代码的清理工作将从下一版本开始(详见 RFC0929 文档)。
Hermes 是 React Native 的默认 JavaScript 引擎,本次更新新增了对Hermes V1的实验性支持(需手动开启)。作为 Hermes 的新一代版本,它通过编译器与虚拟机优化,在多个场景下实现性能突破。
性能实测数据
以复杂真实应用 Expensify 为例,Hermes V1 在低配置 Android 设备与 iOS 设备上的表现如下:
性能指标
Android(低配置设备)
iOS 设备
包加载时间
加快 3.2%
加快 9%
总交互就绪时间(TTI)
加快 7.6%
加快 2.5%
内容交互就绪时间
加快 7.2%
加快 7.5%
注:总 TTI 指“从包加载到首屏渲染并可交互”的时间;内容 TTI 指“从组件首次渲染到组件可交互”的时间。
注意事项
目前 Hermes V1 尚未包含“JS 到原生编译”(原“Static Hermes”)与 2023 年 React Native EU 大会上提及的 JIT 编译功能,这些特性仍在测试中,后续将逐步推出。
如何启用 Hermes V1?
由于当前处于实验阶段,需从源码构建 React Native 才能启用,具体步骤如下:
修改 package.json:强制包管理器解析 Hermes V1 编译器的实验版本(以 yarn/npm 为例):
yarn:在
resolutions中添加"hermes-compiler": "250829098.0.1"npm:在
overrides中添加"hermes-compiler": "250829098.0.1"
Android 端配置:
在
android/gradle.properties中添加hermesV1Enabled=true;编辑
android/settings.gradle,配置从源码构建 React Native:includeBuild('../node_modules/react-native') { dependencySubstitution { substitute(module("com.facebook.react:react-android")).using(project(":packages:react-native:ReactAndroid")) substitute(module("com.facebook.react:react-native")).using(project(":packages:react-native:ReactAndroid")) substitute(project(":packages:react-native:ReactAndroid:hermes-engine")).using(module("com.facebook.hermes:hermes-android:250829098.0.1")) } }
iOS 端配置:
通过环境变量安装 Pods:
RCT_HERMES_V1_ENABLED=1 bundle exec pod install;注意:Hermes V1 不兼容预编译的 React Native 构建,需确保不使用
RCT_USE_PREBUILT_RNCORE标志。
验证是否启用成功: 在应用或 DevTools 控制台执行以下代码,若返回版本号250829098.0.1,则说明启用成功:
HermesInternal.getRuntimeProperties()['OSS Release Version'];3. React 19.1.1 集成:修复与增强并存
0.82 版本将 React 内核更新至 19.1.1,带来两大关键优化:
(1)完整支持 Owner Stacks
在 React Native 0.80 版本中,若使用@babel/plugin-transform-function-name插件,Owner Stacks(组件调用栈)功能无法完全生效。而 19.1.1 版本解除了这一限制,所有 React Native 开发者均可正常使用 Owner Stacks——在报错时,控制台将清晰展示组件的嵌套关系,便于定位问题。
示例对比:
旧版本报错仅显示“ComponentThatThrows”的报错位置;
新版本报错会额外显示组件嵌套链(如
→),明确报错组件的调用上下文。
此前,在 React Native 的 Suspense 边界中使用useDeferredValue与startTransition时,会错误地显示 fallback 组件。19.1.1 版本修复了这一问题,使这两个 Hooks 的行为与 Web 端保持一致,确保应用响应性符合预期。
4. DOM Node APIs 支持:统一 Web 与原生开发体验
从 0.82 版本开始,React Native 原生组件将通过 Ref 提供类 DOM 节点——开发者可使用 Web 开发中熟悉的 API 操作原生组件,无需再依赖 React Native 专属方法(如measure、setNativeProps)。
新增 API 示例
import { useRef, useEffect } from 'react';
import { View } from 'react-native';
function MyComponent(props) {
const ref = useRef();
useEffect(() => {
const element = ref.current;
// 新增 DOM 类 API
const parent = element.parentNode; // 获取父节点
const children = element.children; // 获取子节点列表
const bounds = element.getBoundingClientRect(); // 获取元素边界(类似 measure)
const doc = element.ownerDocument; // 获取根文档节点
const targetElement = doc.getElementById('some-view'); // 通过 ID 获取元素
// 旧方法仍兼容
element.measure((x, y, width, height, pageX, pageY) => {
// 原有 measure 逻辑不变
});
}, []);
return
;
}额外能力支持访问文本节点(由
Text组件创建);支持访问根文档节点(代表 React Native 应用根节点);
完全向后兼容:旧方法(如
measure)仍可正常使用,无需修改现有代码。
0.82 版本在 Canary 渠道中实现了 Web 端 Performance API 的子集,支持开发者在运行时追踪应用性能(后续将集成到 React Native DevTools 的性能面板)。目前支持的 API 包括:
高精度时间:
performance.now()(获取高精度时间戳)、performance.timeOrigin(获取性能计时起点);性能时间线:
PerformanceObserver(监听性能事件)、getEntries()(获取性能数据);用户计时:
performance.mark(标记时间点)、performance.measure(计算两个标记间的时间差);事件计时:
PerformanceObserver可监听event类型性能数据;长任务监测:
PerformanceObserver可监听longtask类型数据(识别阻塞主线程的长任务)。
注:该功能目前仅在 Canary 版本中可用,稳定版将在后续推出。
2. Android 新增 debugOptimized 构建类型
为提升开发体验,0.82 版本为 Android 新增了debugOptimized构建类型,解决了传统构建类型的痛点:
传统
debug类型:支持调试工具(如 React Native DevTools、Metro),但无 C++ 优化,动画与重渲染性能差(约 20 FPS);传统
release类型:性能优但开启混淆,不便于调试;debugOptimized 类型:启用 C++ 优化(动画可达 60 FPS),同时保留 JavaScript 调试能力(支持 React Native DevTools),仅不支持 C++ 原生调试。
社区 CLI:
npx react-native run-android --mode debugOptimizedExpo:
npx expo run:android --variant debugOptimized
注:该特性已回溯至 React Native 0.81 与 Expo SDK 54 版本。
注意:这些 Breaking Changes 需关注 1. 未捕获的 Promise rejection 会触发 console.error
此前,未捕获的 Promise 错误会被完全忽略;0.82 版本将其纳入错误上报机制,未捕获时会触发console.error,并在控制台显示完整错误栈(如“Error: Uncaught (in promise, id:2): Test error in promise”)。
影响:升级后,历史代码中隐藏的 Promise 错误可能会集中暴露,建议提前排查代码中的未捕获 Promise 问题。
2. 其他 Breaking Changes
类别
变更内容
通用
ReactNativeFeatureFlags
迁移至src/private(私有 API,不建议依赖)
通用
Appearance.setColorScheme()
不再接受 null/undefined,重置时需用“unspecified”
iOS
RCTDisplayLink
不再依赖旧 APIRCTModuleData(该 API 后续将删除)
Android
移除com.facebook.react.bridge.JSONArguments类(此前误设为 public)
Android
废弃MessageQueueThreadPerfStatsAPI(统计数据不可靠,已替换为占位实现)
Android
Gradle 版本从 8.x 升级至 9.0.0(无用户感知影响)
C++
删除CallbackWrapper.h/LongLivedObject.h的兼容头文件,需使用新路径:
(旧路径
失效)
如何升级至 0.82 版本? 1. 现有项目升级
使用React Native Upgrade Helper查看版本间的代码差异(工具链接);
参考官方升级文档,逐步调整配置与代码。
npx @react-native-community/cli@latest init MyProject --version latest3. Expo 项目0.82 版本已包含在 Expo Canary 渠道中;
下一稳定版 Expo SDK 55 将基于 React Native 0.83 构建。
0.82 版本已成为 React Native 最新稳定版;
0.79.x 版本正式停止支持(不再接收 bug 修复与安全更新)。
React Native 0.82 以“新架构全面落地”为核心,同步带来性能、开发体验与兼容性的多重升级。对于开发者而言,建议尽早完成新架构迁移,提前适配 Hermes V1 与 DOM Node APIs,为后续版本升级奠定基础。你对本次更新有哪些期待?欢迎在评论区分享你的使用体验!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.