React Native 0.85 - 新动画后端,新 Jest 预设包
今天我们很高兴发布 React Native 0.85!
此版本包括新动画后端,将 Jest 预设移至专用包,并包含许多其他改进和修复。
亮点
破坏性变更
亮点
新动画后端
React Native 0.85 引入了新的共享动画后端,这是与 Software Mansion 合作构建的。
这是一个新的内部引擎,用于支持 Animated 和 Reanimated 底层如何应用动画。通过将主要动画更新逻辑移至 React Native 核心,Reanimated 能够实现以前不可能的性能改进,并确保更新协调过程经过适当测试,并在未来的 RN 更新中保持稳定。
在 Animated 中,你现在可以使用原生驱动 (native driver) 动画化布局属性(此处曾声明的限制 不再适用)。
| iOS | Android |
|---|---|
![]() | ![]() |
你可以在 react-native/packages/rn-tester/js/examples/AnimationBackend/ 下找到更多示例。
要启用,你可以 如此页面所述 启用 React Native 的实验性通道。
此实验性功能将从 React Native 0.85.1 开始可用,该版本将在不久的将来发布。
如何动画化布局属性
使用新的动画后端,你将能够在 Animated 中使用原生驱动 (native driver) 动画化 Flexbox 和位置属性。
import {
Animated,
Button,
View,
useAnimatedValue,
} from 'react-native';
function MyComponent() {
const width = useAnimatedValue(100);
const toggle = () => {
Animated.timing(width, {
toValue: 300,
duration: 500,
useNativeDriver: true,
}).start();
};
return (
<View style={{flex: 1}}>
<Animated.View
style={{width, height: 100, backgroundColor: 'blue'}}
/>
<Button title="Expand" onPress={toggle} />
</View>
);
}
React Native DevTools 改进
React Native DevTools 在此版本中获得了以下几项改进:
- 多个 CDP 连接:React Native 现在支持多个同时进行的 Chrome DevTools Protocol 连接,使 React Native DevTools、VS Code 和 AI 代理等客户端能够同时连接。这解锁了更丰富、可组合的工具工作流,而不会意外结束会话。
- macOS 上的原生标签页:我们更新了桌面应用以编译为 macOS 26,并为高级用户启用了系统级标签页处理。当打开多个 DevTools 窗口时,可通过 窗口 > 合并所有窗口 访问。
- 请求负载预览:在因回归问题被禁用后,网络面板中的请求体预览现已在 Android 上恢复。
Metro TLS 支持
Metro 开发服务器现在可以接受 TLS 配置对象,在开发期间启用 HTTPS(以及用于快速刷新的 WSS)——这对于测试强制安全连接的 API 很有用。
在 metro.config.js 中配置它:
const fs = require('fs');
config.server.tls = {
ca: fs.readFileSync('path/to/ca'),
cert: fs.readFileSync('path/to/cert'),
key: fs.readFileSync('path/to/key'),
};
对于本地开发,mkcert 是一种生成本地信任证书而不出现浏览器警告的简单方法。
破坏性变更
Jest 预设移至新包
React Native 的 Jest 预设已从 react-native 提取到新的 @react-native/jest-preset,减小了核心包的大小,并为项目的测试设置提供了更大的灵活性。
通过一行更改更新你的 jest.config.js:
- preset: 'react-native',
+ preset: '@react-native/jest-preset',
停止支持已生命周期结束 (EOL) 的 Node.js 版本
React Native 0.85 停止支持生命周期结束 (EOL) 的 Node.js 版本和 v20.19.4 之前的版本。请在升级前确保你运行的是受支持的 Node.js 版本。
- Node.js v20 (>=20.19.4) — 受支持 (活跃 LTS)
- Node.js v21 — 不支持 (EOL)
- Node.js v22 — 受支持 (活跃 LTS)
- Node.js v23 — 不支持 (EOL)
- Node.js v24+ — 受支持
StyleSheet.absoluteFillObject 被移除
已弃用的 StyleSheet.absoluteFillObject API 已被移除。请改用 StyleSheet.absoluteFill 或定义你自己的绝对定位样式。
- const styles = StyleSheet.absoluteFillObject;
+ const styles = StyleSheet.absoluteFill;
其他破坏性变更
常规
Pressable不再卸载隐藏Activity中的事件监听器。- 移除了
ShadowNode::Shared,ShadowNode::Weak,ShadowNode::Unshared,ShadowNode::ListOfWeak,ShadowNode::ListOfShared,SharedImageManager和ContextContainer::Shared的已弃用 C++ 类型别名 —— 那些未被使用,消费库应直接使用类型。
Android
- 我们将
receiveTouches重新添加回RCTEventEmitter,默认为 no-op。这是一个修复,旨在减少尚未迁移离开此方法的库的破坏性变更。 ReactTextUpdate现在是内部的,不应直接公开访问。- 多个类因旧架构清理而被弃用或移除:
ReactZIndexedViewGroup现已弃用。UIManagerHelper现已弃用。CatalystInstanceImpl已被移除(它之前已弃用)。NativeViewHierarchyManager已被完全存根化。
iOS
RCTHostRuntimeDelegate现已弃用并合并到RCTHostDelegate中。- 修复了使用
React.XCFramework时的重复符号错误(通过fmtbump 到 12.1.0)。
其他变更
- Metro 升级到
^0.84.0。 - React 更新为使用 Hermes
250829098.0.10。 - Yoga:
YogaNode在 Android 上迁移到 Kotlin。 - 无障碍:弃用
AccessibilityInfo.setAccessibilityFocus,改用AccessibilityInfo.sendAccessibilityEvent。 - TypeScript:多个实用程序类型转换(
$Values,mixed,$ReadOnly,$ReadOnlyArray)。 - Android 构建:允许通过
reactNativeDevServerIpGradle 属性指定开发服务器 IP。 - iOS 构建:在
React.XCFramework中添加了对 clang 虚拟文件系统的支持。
致谢
React Native 0.85 包含来自 58 位贡献者的超过 604 次提交。感谢所有的辛勤工作!
我们要特别感谢在此版本中做出重大贡献的那些社区成员。
- Zeya Peng, Bartłomiej Błoniarz, 和 Dawid Małecki 负责动画后端
- Vitali Zaidman 负责 Metro TLS
- Moti Zilberman 负责多个 CDP 连接
- Phil Pluckthun 和 Alex Hunt 负责 Jest 预设迁移
此外,我们还要感谢为此发布文档撰写功能的其他作者:
升级到 0.85
0.85 现在是 React Native 的最新稳定版本,0.82.x 移至不支持。更多信息请参阅 React Native 的支持政策。
升级
请使用 React Native Upgrade Helper 查看现有项目 React Native 版本之间的代码更改,此外还有 升级文档。
创建新项目
npx @react-native-community/cli@latest init MyProject --version latest
Expo
如果你使用 Expo,下一个 SDK,SDK 56,将包含 React Native 0.85。









