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) |
| 性能 | 多线程跳转 | 减少线程跳转 |
| 布局引擎 | Yoga | Yoga(集成度更高) |
新版架构正在通过功能标志(feature flags)逐步推出,允许开发人员选择性地采用特定组件。
来源
React Native 使用 JavaScript 作为其编程语言,React 作为 UI 框架。代码可以使用以下方式执行:
JavaScript 包使用 Metro(React Native 的打包器)创建,它负责模块解析、转换和打包。
来源
React Native 的通信层使 JavaScript 代码能够与原生平台代码进行交互
EventEmitter 是一个核心类,负责管理整个系统的事件处理,允许组件监听和触发事件。
来源
React Native 中的 UI 渲染管线遵循以下步骤:
新架构中的 Fabric 渲染器通过持久化的 C++ 影子树和同步渲染来改进此管线。
来源
React Native 被组织成一个包含多个包的 monorepo。
仓库中的主要包包括:
| 包 | 描述 |
|---|---|
react-native | 开发人员安装的核心包 |
react-native-codegen | 用于构建接口类型的代码生成工具 |
virtualized-lists | 用于高效渲染的虚拟化列表实现 |
community-cli-plugin | React Native 开发的 CLI 命令 |
dev-middleware | 开发服务器中间件 |
react-native-babel-preset | React Native 的 Babel 预设 |
normalize-colors | 颜色标准化实用工具 |
assets-registry | 资源管理工具 |
来源
React Native 使用复杂的构建系统来为不同平台编译和打包代码。
构建系统的关键组件:
来源
React Native 使用功能标志系统来逐步推出新架构组件。
关键功能标志包括:
| 标志 | 描述 |
|---|---|
enableFabricRenderer | 启用新的 Fabric 渲染系统 |
enableBridgelessArchitecture | 启用无需桥接的直接 JSI 通信 |
useTurboModules | 启用 TurboModule 系统以支持原生模块 |
enableLayoutAnimations | 启用原生驱动的布局动画 |
enableViewRecycling | 启用视图回收以提高性能 |
开发人员可以配置这些标志以逐步采用新架构组件。
来源
React Native 提供了一个全面的开发环境,包含:
开发工作流程通常包括:
来源
React Native 在 MIT 许可证下获得许可,允许商业和开源使用。该项目由 Meta(前身为 Facebook)维护,并得到庞大开发者社区的贡献。
React Native 社区包括:
来源
React Native 遵循定期的发布周期,并采用语义化版本控制。主版本可能包含破坏性更改,而次要版本和补丁版本分别引入新功能和错误修复。
React Native 团队同时维护多个版本,以支持尚未升级到最新版本的用户。
来源