React Native 0.75 重磅发布:性能飞跃与重要更新全面解析

开发 前端
React Native 0.75 引入了关键的更新,这些更新简化了开发过程,并提高了性能和兼容性。开发者被鼓励仔细审查这些更改,并更新他们的项目以确保平稳过渡。

React Native 0.75 的发布标志着一个重要的里程碑,该版本通过一系列有影响力的更新和更改,旨在提高性能、稳定性和整体开发者体验。以下是此版本中包含的增强功能、新特性和重大更改的全面概述。

亮点 🚀

Yoga 3.1 的增强和布局改进

React Native 0.75 引入了 Yoga 3.1,它带来了一些增强功能和新的布局能力。一个重要亮点是对布局属性(如间隙和位移)的百分比值的支持。这些更新提供了更灵活和响应式的设计选项,仅在新架构中可用。对于这些功能感兴趣的用户应考虑迁移到更新的架构。

稳定新架构

此次发布继续推进新架构的稳定化进程。自 React Conf 上发布 Beta 版以来,进行了多次错误修复和改进:

  • Android 字体大小调整:修复了 adjustsFontSizeToFit 的问题。
  • 文本对齐:解决了 Android 上 textAlign 在内联视图中不起作用的问题。
  • 文本基线:修复了 iOS 上的文本基线问题。

协作与新 API

  • Expo 集成:React Native Directory 现在提供了新架构支持信息,简化了库兼容性检查。
  • TurboModules 稳定 API:引入了用于访问 TurboModules 中 jsi::Runtime 的新稳定 API,提供了原生模块与运行时交互的安全方法。

框架与生产力

React Native 0.75 强调使用 Expo 等框架构建应用程序,以提高生产力并提供更好的开发者体验。

  • 模板迁移:/template 文件夹已迁移到 @react-native-community/template,以实现更快的更新和更好的社区维护。
  • **弃用 react-native init**:react-native init 命令将于 2024 年 12 月 31 日弃用。之后,请使用 npx create-expo-app 创建 Expo 应用或使用 npx @react-native-community/cli init 创建社区 CLI 项目。其他命令如 react-native config 将继续正常运行。
  • 自动链接性能改进:自动链接逻辑已重写,以提高性能,并在 Android 和 iOS 上显著提升速度。

重大更改 ⚙️

TypeScript 中的触摸组件

像 TouchableOpacity 和 TouchableHighlight 这样的触摸组件现在是函数组件,不能在泛型表达式中用作类型。

import { TouchableHighlight } from 'react-native';
const ref = useRef<TouchableHighlight>();

改为使用 React.ElementRef 或 View 类型。

import { TouchableHighlight } from 'react-native';
const ref1 = useRef<React.ElementRef<typeof TouchableHighlight>>();
// 或
const ref2 = useRef<View>();

停止支持旧平台

React Native 0.75 是最后一个支持 minSdk 23(Android 6.0)和 minIOSVersion 13.4 的版本。从 React Native 0.76 开始,最低支持版本将是 Android 7.0(minSdk 24)和 iOS 15.1。更多详细信息可以在 Android 和 iOS 的官方公告中找到。

移除 Android 上的 JSIModule

com.facebook.react.bridge.JSIModule API 最初是为了促进原生模块在 Android 上直接访问 JSI,但在 0.74 版本中弃用,且使用很少,因此在 0.75 版本中彻底移除。开发者应过渡到使用 Turbo Native Modules 来实现类似功能。

Android 弹出菜单的更改

为模块化核心功能,Android 的 PopUpMenu 已被提取到一个单独的包中。以下核心方法已被弃用:

  • UIManagerModule.showPopupMenu()
  • UIManagerModule.dismissPopupMenu()

开发者现在应使用 @react-native/popup-menu-android 包中的 <PopupMenuAndroid /> 组件。

完成 iOS 上 PushNotificationIOS 的弃用

随着 PushNotificationIOS 模块的持续弃用,0.75 版本中移除了几个旧的 API:

  • + (void)didReceiveLocalNotification:(UILocalNotification *)notification;
  • + (void)didReceiveRemoteNotification:(NSDictionary *)notification;

推荐使用更新的 API didReceiveNotification:(UNNotification *)notification,以更好地符合当前的通知标准。

社区 CLI 的更新

为提高性能和专注于现代工具,两条命令已从社区 CLI 中移除:

  • ram-bundle:随着 Hermes 的引入,该命令已过时,Hermes 是默认的 JS 引擎。不再推荐直接加载内存包。
  • profile-hermes:该分析工具使用了过时的 .cpuprofile 格式,与最新的 Chrome 版本不兼容。现在可以通过“实验新调试器”中的“Profiler”面板访问 CPU 分析功能。

这些更新反映了 React Native 致力于现代化开发体验的承诺,确保更好的性能并保持与当前标准的兼容性。本次发布为更强大和高效的应用程序开发铺平了道路。

React Native 0.75 的其他重大更改 ⚒️

通用

  • 代码生成:从 C++ TurboModules 类名中删除了 Cxx 标记。
  • 浮点枚举:由于精度错误,不再支持。
  • 错误处理:在向非可空参数传递 null 时抛出错误。
  • 代码检查:ESLint 不再运行 Prettier。

C++

  • ScrollViewShadowNode:在构造函数中新增 bool includeTransform 参数。
  • RuntimeExecutor:移除了 executeAsynchronously 和 executeSynchronously_CAN_DEADLOCK。
  • 错误处理:将 JsErrorHandlingFunc 重命名为 OnJsError。
  • 导入:从 ReactPrimitives.h 中移除未使用的导入。
  • 方法:LongLivedObjectCollection 和 LongLivedObject 现在接受一个 Runtime 参数。
  • 文件重命名:utils/jsi.h 重命名为 jsi-utils.h。

TextInput

  • 回调移除:移除了已弃用的 onTextInput 回调。

Pressability

  • 方法移除:移除了 onLongPressShouldCancelPress_DEPRECATED、onResponderTerminationRequest_DEPRECATED 和 onStartShouldSetResponder_DEPRECATED。

Android

  • ReactViewBackgroundDrawable:已弃用,建议使用 CSSBackgroundDrawable。
  • ReactContext:现在是抽象类;使用 BridgeReactContext 和 BridgelessReactContext。
  • 布局:支持百分比弹性间隙值。
  • 运行时:从 ReactHostImpl 中移除了 ReactJsExceptionHandler。
  • 开发支持:DevSupportManagerFactory.create() 现在接受 PausedInDebuggerOverlayManager。
  • 测量:删除了 UIManagerModule.measureLayoutRelativeToParent()。

iOS

  • 运行时:移除了 [RCTHost getSurfacePresenter] 和 [RCTHost getModuleRegistry]。
  • 图像:移除了 RCTImageLoadingPerfInstrumentationEnabled。
  • 错误处理:移除了通过 RCTBridge 访问 RCTRedBox 的功能。
  • CocoaPods:将 BUILD_FROM_SOURCE 重命名为 RCT_BUILD_HERMES_FROM_SOURCE。
  • TextInput:移除了已弃用的 onTextInput 回调。

结论

React Native 0.75 引入了关键的更新,这些更新简化了开发过程,并提高了性能和兼容性。开发者被鼓励仔细审查这些更改,并更新他们的项目以确保平稳过渡。这一版本代表了 React Native 发展的重要一步,加强了该框架在提供现代、高效和稳健的开发体验方面的承诺。

责任编辑:武晓燕 来源: 大迁世界
相关推荐

2016-08-15 13:34:37

React NativiOSjs入口

2024-10-31 08:35:53

2023-06-24 17:09:06

React前端

2015-09-22 09:50:36

FacebookAndroid

2017-01-04 10:18:00

React NativScrollViewAndroid

2024-04-24 11:00:05

React 18Fiber

2016-08-12 08:49:46

React NativFacebookNative

2023-09-04 08:32:43

web开发图像

2017-04-17 06:07:01

React Nativ开发性能

2024-06-04 10:21:33

React组件布局架构

2016-10-20 14:41:38

VMware虚拟化

2023-03-07 16:12:32

2024-02-28 14:06:58

2016-10-13 19:01:59

React NativUbuntu

2013-06-04 17:14:42

戴尔

2017-10-24 13:43:52

中科曙光AI

2019-08-29 09:00:55

开发Flutter框架

2021-04-17 18:19:23

FlutterReact Nativ开发

2015-07-21 17:23:32

用友IUAP
点赞
收藏

51CTO技术栈公众号