此页面解释了 React Native 在 iOS 上渲染组件的方式,涵盖了从 JavaScript 到 UIKit 视图的组件渲染管道。它侧重于组件如何在 iOS 上创建、挂载、更新和管理。有关 Android 渲染的信息,请参阅 Android UI Components。
本文档描述了 React Native 在 iOS 上的渲染系统,包括:
React Native 的 iOS 渲染系统将 JavaScript 中定义的 React 组件转换为原生 iOS UIKit 视图。该管道包含多个协同工作的层,以创建和更新 UI。
来源
React Native iOS 组件构建在一个视图类的层级结构之上,这些类实现了 RCTComponentViewProtocol。此协议定义了创建、更新和管理组件视图的方法。
来源
React Native 维护一个组件视图注册表,以高效管理视图的创建和重用。 RCTComponentViewRegistry 负责此管理。
来源
该过程始于 RCTAppDelegate,它设置了 React Native 环境并创建了初始根视图。
来源
在 Fabric 架构中,Surface 代表一个 React 根视图并管理组件树的生命周期。
来源
当 React 渲染或更新组件时,原生端会创建和更新相应的原生视图。
来源
React Native 渲染的核心是 Shadow 视图变更的概念。这些是描述视图层级更改的操作。
有五种主要的变更类型:
| 变更类型 | 描述 | 实现细节 |
|---|---|---|
| 创建 | 创建新的组件视图 | 从注册表中分配或重用组件视图 |
| 删除 | 移除组件视图 | 将视图返回到重用池 |
| 插入 | 将视图添加到父级 | 在父级的子级数组中的特定索引处添加子视图 |
| 删除 | 从父级中移除视图 | 移除子视图中的特定索引 |
| 更新 | 更新视图属性 | 可以更新 props、state、布局或事件发射器 |
来源
当组件需要更新时,React Native 通过几个更新方法将更改应用于原生视图。
更新过程有两个阶段:
finalizeUpdates: 方法,并提供一个掩码来指示更新了哪些方面。来源
React Native 通过 LayoutAnimationKeyFrameManager 支持布局更改的动画。此系统会拦截视图变更并应用动画。
来源
新架构引入了“无桥接”模式,该模式使用直接 JavaScript 接口 (JSI) 而不是桥接。
在无桥接模式下:
RCTHost 替换 RCTBridge来源
React Native 的 iOS 渲染系统包含多项优化以提高性能:
来源
React Native 通过多个入口点与 iOS 应用生命周期集成。
来源
React Native 提供了多个实用工具来调试 iOS 上的渲染问题。
RCTAssert 宏有助于捕获编程错误。newArchitectureValidation 系统有助于识别与新架构不兼容的代码。来源