菜单

React Native 概述

相关源文件

React Native 是一个使用 JavaScript 和 React 构建原生移动应用程序的框架。它允许开发人员使用单一代码库为 iOS 和 Android 平台创建移动应用,在提供原生性能的同时,通过“一次学习,随处编写”的方法来提高开发效率。

本文档提供了 React Native 框架、其架构以及构成它的关键组件的高层概述。有关 React Native 特定方面的更多详细信息,请参阅此 wiki 中的其他部分,例如 核心架构UI 组件和样式布局引擎

框架架构

React Native 的架构由几个不同的层组成,这些层协同工作,使 JavaScript 代码能够控制原生 UI 组件。

高层架构

来源

旧版与新版架构

React Native 目前正从其旧版架构过渡到新版架构。主要区别在于:

功能旧有架构新架构
JavaScript Bridge使用序列化的 JSON 桥接使用 JavaScript Interface (JSI) 进行直接通信
UI 管理Paper UI(虚拟 DOM)Fabric Renderer(响应式 C++ 核心)
原生模块传统原生模块TurboModules(按需、类型安全)
代码生成有限广泛的接口代码生成 (CodeGen)
性能多线程跳转减少线程跳转
布局引擎YogaYoga(集成度更高)

新版架构正在通过功能标志(feature flags)逐步推出,允许开发人员选择性地采用特定组件。

来源

核心组件

JavaScript 运行时

React Native 使用 JavaScript 作为其编程语言,React 作为 UI 框架。代码可以使用以下方式执行:

  1. Hermes - 一个为 React Native 优化的轻量级 JavaScript 引擎
  2. JSC (JavaScriptCore) - Apple 的 JavaScript 引擎(iOS 上的默认引擎)

JavaScript 包使用 Metro(React Native 的打包器)创建,它负责模块解析、转换和打包。

来源

通信层

React Native 的通信层使 JavaScript 代码能够与原生平台代码进行交互

  1. 旧版桥接:异步、基于序列化 JSON 的消息系统
  2. JavaScript Interface (JSI):JavaScript 和 C++ 之间的直接、同步通信
  3. TurboModules:通过 JSI 访问的按需、类型安全的原生模块
  4. CodeGen:生成 JavaScript 和原生代码之间的类型安全接口

EventEmitter 是一个核心类,负责管理整个系统的事件处理,允许组件监听和触发事件。

来源

UI 渲染管线

React Native 中的 UI 渲染管线遵循以下步骤:

  1. JavaScript 代码定义带有 props 和样式的 React 组件
  2. 这些组件被转换为节点的“影子树”
  3. Yoga 布局引擎计算位置和尺寸
  4. 影子树通过挂载层挂载到原生视图
  5. 组件 props 的更新会触发选择性重渲染

新架构中的 Fabric 渲染器通过持久化的 C++ 影子树和同步渲染来改进此管线。

来源

存储库结构

React Native 被组织成一个包含多个包的 monorepo。

仓库中的主要包包括:

描述
react-native开发人员安装的核心包
react-native-codegen用于构建接口类型的代码生成工具
virtualized-lists用于高效渲染的虚拟化列表实现
community-cli-pluginReact Native 开发的 CLI 命令
dev-middleware开发服务器中间件
react-native-babel-presetReact Native 的 Babel 预设
normalize-colors颜色标准化实用工具
assets-registry资源管理工具

来源

构建系统

React Native 使用复杂的构建系统来为不同平台编译和打包代码。

构建系统的关键组件:

  1. Metro:为 React Native 优化的 JavaScript 打包器
  2. Babel:带有 React Native 自定义预设的 JavaScript 编译器
  3. CodeGen:生成 JavaScript 和原生代码之间的接口
  4. Gradle:Android 的构建系统
  5. CocoaPods:iOS 的依赖管理器
  6. Flow/TypeScript:静态类型检查器

来源

功能标志系统

React Native 使用功能标志系统来逐步推出新架构组件。

关键功能标志包括:

标志描述
enableFabricRenderer启用新的 Fabric 渲染系统
enableBridgelessArchitecture启用无需桥接的直接 JSI 通信
useTurboModules启用 TurboModule 系统以支持原生模块
enableLayoutAnimations启用原生驱动的布局动画
enableViewRecycling启用视图回收以提高性能

开发人员可以配置这些标志以逐步采用新架构组件。

来源

开发工作流

React Native 提供了一个全面的开发环境,包含:

  1. 热重载:无需重新构建即可立即更新 JavaScript 代码
  2. Metro 开发服务器:在开发过程中提供 JavaScript 包
  3. LogBox:增强的错误和警告报告
  4. React DevTools:组件检查和调试
  5. Chrome 调试:通过 Chrome DevTools 进行 JavaScript 调试

开发工作流程通常包括:

来源

许可与社区

React Native 在 MIT 许可证下获得许可,允许商业和开源使用。该项目由 Meta(前身为 Facebook)维护,并得到庞大开发者社区的贡献。

React Native 社区包括:

  1. 核心贡献者:来自 Meta 和其他公司的开发者
  2. 第三方库:扩展 React Native 的功能
  3. React Native Community:维护核心模块的组织
  4. 文档: 全面的指南和 API 参考

来源

版本控制与更新

React Native 遵循定期的发布周期,并采用语义化版本控制。主版本可能包含破坏性更改,而次要版本和补丁版本分别引入新功能和错误修复。

React Native 团队同时维护多个版本,以支持尚未升级到最新版本的用户。

来源