本文档解释了 React Native 应用在 iOS 上的初始化过程,涵盖了 App Delegate 设置、桥接/运行时初始化、根视图创建和组件挂载等过程。有关初始化后组件渲染的信息,请参阅 iOS 组件渲染。
React Native 中的 iOS 应用初始化遵循一个将 iOS 原生代码与 JavaScript 桥接的特定流程。该过程在 iOS 启动应用程序并调用 AppDelegate 时开始,后者初始化 React Native 的运行时并渲染根组件。
iOS 应用初始化流程
来源
iOS 应用初始化始于 RCTAppDelegate,这是一个实现了标准的 iOS UIApplicationDelegate 协议以处理应用程序启动和配置的类。
RCTAppDelegate 类是 React Native iOS 应用的默认实现,提供了
application:didFinishLaunchingWithOptions: 方法的实现来源
当 iOS 应用程序启动时,系统会调用 application:didFinishLaunchingWithOptions:,它会初始化 React Native 环境
RCTReactNativeFactory 实例automaticallyLoadReactNativeWindow 为 true(默认),则调用 loadReactNativeWindow:loadReactNativeWindow: 方法
rootViewFactory 获取根视图来源
RCTReactNativeFactory 负责根据提供的配置初始化 React Native 环境。
该工厂使用功能标志来确定架构模式
| 功能标志 | 描述 |
|---|---|
fabricEnabled | 控制是否使用 Fabric 渲染器 |
turboModuleEnabled | 控制是否使用 TurboModules |
bridgelessEnabled | 控制是否使用新的无桥接架构 |
这些标志决定了是使用旧的桥接还是带 React Host 的新架构。
来源
RCTRootViewFactory 负责根据所选架构创建根视图
来源
React Native 支持两种初始化架构模式
在旧版架构中
RCTBridge 来管理 JavaScript 和原生代码之间的通信RCTRootView 以渲染根组件来源
在新架构中
RCTHost 来替代桥接RCTFabricSurfaceRCTSurfaceHostingProxyRootView 来托管 Fabric Surface来源
在初始化期间,React Native 配置 JavaScript 运行时环境
React Native 支持多种 JavaScript 引擎
| 引擎 | 描述 |
|---|---|
| Hermes | React Native 的默认 JavaScript 引擎 |
| JSC | JavaScriptCore,备用的 JavaScript 引擎 |
特定引擎通过 USE_HERMES 构建标志在构建时选择。
来源
JavaScript 执行器工厂根据所选引擎创建,并使用必要的绑定配置运行时
来源
在初始化期间,React Native 设置组件注册系统
RCTComponentViewFactory 管理可在 JavaScript 中使用的原生 UI 组件的注册
thirdPartyFabricComponentsProvider 进行注册UnimplementedView来源
React Native 使用依赖提供程序来注入平台特定的实现
RCTDependencyProvider 协议定义了模块发现的接口来源
下图展示了 iOS 应用初始化的完整流程
来源
React Native 中的 iOS 应用初始化遵循以下关键步骤
RCTAppDelegate 中调用 application:didFinishLaunchingWithOptions:RCTReactNativeFactory 来管理初始化过程RCTRootViewFactory 创建根视图此初始化过程构成了 React Native 应用程序的基础,将原生 iOS 环境与 JavaScript 运行时连接起来,以实现跨平台开发。