React Native 团队原则
Facebook 的 React Native 团队遵循一些原则,这些原则有助于确定我们在 React Native 上的工作优先级。这些原则特指我们团队的原则,并不一定代表 React Native 社区的所有利益相关者。我们在此分享这些原则,以提高透明度,让大家了解是什么驱动着我们,我们如何做出决策,以及我们如何聚焦我们的努力方向。
原生体验
我们对 React Native 的首要任务是匹配人们对每个平台的期望。这就是为什么 React Native 会渲染为平台原生组件。我们重视原生观感胜过跨平台一致性。
例如,React Native 中的 TextInput 在 iOS 上会渲染为 UITextField。这确保了与密码管理器和键盘控制的集成开箱即用。通过使用平台原生组件,React Native 应用也能够及时跟进 Android 和 iOS 新版本的设计和行为变化。
为了匹配原生应用的观感,我们也必须匹配它们的性能。这是我们投入最大力气的地方。例如,Facebook 创建了 Hermes,一个专为 Android 上的 React Native 从零开始构建的新 JavaScript 引擎。Hermes 显著提升了 React Native 应用的启动时间。我们也在进行重大的架构更改,以优化线程模型并使 React Native 更容易与原生代码互操作。
大规模应用
Facebook 应用中有数百个屏幕是使用 React Native 实现的。Facebook 应用被数十亿用户在各种设备上使用。这就是为什么我们投资于解决大规模应用中最具挑战性的问题。
在我们的应用中部署 React Native 使我们能够识别在较小规模下不会发现的问题。例如,Facebook 致力于提升从最新款 iPhone 到许多老旧型号 Android 设备的性能。这一重点指导了我们的架构项目,例如 Hermes、Fabric 和 TurboModules。
我们也已经证明 React Native 可以在大型组织中得到应用。当数百名开发人员在同一个应用上工作时,渐进式采用是必须的。这就是为什么我们确保 React Native 可以逐个屏幕地采用。很快,我们将更进一步,支持将现有原生屏幕中的单个原生视图迁移到 React Native。
专注于大规模应用意味着我们团队目前并没有在做很多事情。例如,我们团队不负责推动 React Native 在行业中的普及。我们也不会积极地为我们在大规模应用中没有遇到的问题构建解决方案。我们很自豪拥有 许多合作伙伴和核心贡献者 能够专注于社区中的这些重要领域。
开发者效率
优秀的用户体验是迭代创造出来的。在一个运行的应用中,查看代码更改的结果应该只需要几秒钟。React Native 的架构使其能够在开发过程中提供几乎即时的反馈。
我们经常听到团队反馈,采用 React Native 显著提升了他们的开发效率。这些团队发现,开发过程中的即时反馈使得尝试不同的想法和添加额外的修饰变得容易得多,因为他们无需为每一个小改动中断编码会话。当我们对 React Native 进行更改时,我们会确保保留这种开发者体验的质量。
即时反馈并不是 React Native 提升开发者效率的唯一方式。团队可以利用快速增长的高质量开源包生态系统。团队还可以在 Android、iOS 和 Web 之间共享业务逻辑。这有助于他们更快地发布更新,并减少平台团队之间的组织壁垒。
支持所有平台
当我们在 2014 年推出 React Native 时,我们提出了“学会一次,随处编写”的口号——我们说的“随处”就是指任何地方。开发者应该能够触达尽可能多的人,而不受设备型号或操作系统的限制。
React Native 面向包括移动、桌面、Web、电视、VR、游戏主机等非常不同的平台。我们希望在每个平台上实现丰富的体验,而不是要求开发者以最低共同标准进行构建。为此,我们专注于支持每个平台的独特功能。这涵盖了从不同的输入机制(例如:触摸、手写笔、鼠标)到根本不同的消费体验,如 VR 中的 3D 环境。
这一原则指导了我们在跨平台 C++ 中实现 React Native 新核心架构的决定,以促进平台之间的一致性。我们还在完善面向其他平台维护者(如 Microsoft 的 Windows 和 macOS)的公共接口。我们努力使任何平台都能支持 React Native。
声明式 UI
我们不主张在每个平台上部署完全相同的用户界面,我们相信应该使用相同的声明式编程模型来展现每个平台的独特能力。我们的声明式编程模型就是 React。
根据我们的经验,React 普及的单向数据流使应用更容易理解。我们更喜欢将屏幕表达为声明式组件的组合,而不是命令式管理的视图。React 在 Web 上的成功以及新的原生 Android 和 iOS 框架的发展方向都表明,行业也已经接受了声明式 UI。
React 普及了声明式用户界面。然而,仍有许多 React 具有独特优势可以解决的未解决问题。React Native 将继续在 React 的创新基础上发展,并始终站在声明式用户界面运动的前沿。