React Native 0.78 -重大升级支持 React

2025-03-28  本文已影响0人  涅槃快乐是金

React 19

React 19 现已在 React Native 中可用!

由于我们在 React 18 的基础上进行了一些改动,升级至 React 19 需要对你的应用进行更新。例如,我们移除了一些 API(如 propTypes),因此你需要调整你的应用以兼容新版 React。

请按照我们的逐步指南将你的应用升级到 React 19。

升级后,你可以使用 React 的所有新功能,包括但不限于:


React 编译器(React Compiler)

React Compiler 是一个构建时优化工具,它可以自动对 React 应用进行 记忆化(memoization) 处理。通常,开发者可以手动使用 useMemouseCallbackReact.memo 进行优化,但容易忘记或误用。React Compiler 通过分析 JavaScript 代码和 React 规则,自动在组件和 Hooks 内部进行优化。

在本次更新中,我们简化了在 React Native 中启用 React Compiler 的流程。之前,开发者需要安装两个包(编译器和运行时),并手动配置 Babel 插件。现在,你只需安装编译器本身并配置 Babel 插件即可。

要检查编译器是否生效,可以打开 React Native DevTools,被记忆化的组件将在组件检查器中带有 Memo ✨ 标签

更多信息请参考:


更快、更稳定的版本发布

我们计划在 2025 年加快 React Native 的稳定版本发布频率。

这将为整个 React Native 生态带来更好的开发体验。


Metro 支持 JavaScript 日志回溯(Opt-in)

在 0.77 版本中,我们移除了 Metro 开发服务器的 JavaScript 日志回溯功能,但根据社区反馈,我们在 0.78 中重新引入了该功能,作为 可选项

你可以使用 --client-logs 选项启用它,例如:

npx @react-native-community/cli start --client-logs

请注意,这一功能未来仍计划移除,目前默认处于关闭状态。


新增支持 Android XML Drawable

React Native 0.78 允许在 Android 上加载 XML 矢量资源(如图标、插图等),以提供更优的渲染效果和更小的应用体积。

现在,你可以通过 Image 组件直接加载 .xml 资源:

<Image source={require('./img/my_icon.xml')} style={{ width: 40, height: 40 }} />

或使用 import 方式:

import MyIcon from './img/my_icon.xml';
<Image source={MyIcon} style={{ width: 40, height: 40 }} />

优势:

注意事项:


iOS 新增 ReactNativeFactory

React Native 0.78 在 iOS 端引入了 RCTReactNativeFactory,使其无需 AppDelegate 即可创建 React Native 实例,简化了 Brownfield(混合应用) 的集成。

现在,你可以在 ViewController 中直接加载 React Native 视图:

import React
import React_RCTAppDelegate

public class ViewController {
  var reactNativeFactory: RCTReactNativeFactory?
  var reactNativeDelegate: ReactNativeDelegate?

  public func viewDidLoad() {
    super.viewDidLoad()
    
    reactNativeDelegate = ReactNativeDelegate()
    reactNativeFactory = RCTReactNativeFactory(delegate: reactNativeDelegate!)
    view = reactNativeFactory?.rootViewFactory.view(withModuleName: "<your module name>")
  }
}

class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate {
  override func sourceURL(for bridge: RCTBridge) -> URL? {
    return self.bundleURL()
  }

  override func bundleURL() -> URL? {
    #if DEBUG
    return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
    #else
    return Bundle.main.url(forResource: "main", withExtension: "jsbundle")
    #endif
  }
}

这样,React Native 视图将在用户进入 ViewController 时自动加载。


其他重大变更

通用更新

Android 变更

iOS 变更


升级至 0.78

请使用 React Native Upgrade Helper 查看代码变更。

创建新项目:

npx @react-native-community/cli@latest init MyProject --version latest

如果你使用 Expo,React Native 0.78 将在 Expo SDK 的 canary 版本 中支持。

🚀 React Native 0.78 现已成为最新稳定版本,0.75.x 版本正式停止支持。

上一篇 下一篇

猜你喜欢

热点阅读