微软 Skype 团队很高兴宣布开源 ReactXP,这是一个我们为跨平台开发而开发的库。它基于 React JS 和 React Native,允许您使用单一代码库创建跨 Web 和原生平台应用程序。
ReactXP 的历史
Skype 运行在许多平台上——台式机、笔记本电脑、手机、平板电脑、浏览器,甚至电视和汽车。历史上,每个 Skype 客户端的 UI 都是用每个平台的“原生”语言从头开始编写的(iOS 上的 Objective C,Android 上的 Java,Web 上的 HTML 和 JavaScript 等)。大约一年前,我们开始重新构想 Skype。我们决定需要采取一种全新的客户端开发方法——一种能够最大限度提高我们工程效率和敏捷性的方法。我们希望摆脱在不同代码库中多次实现每个新功能的困境。我们希望最大限度地减少重复工作。我们探索了许多可用的选项。像 Cordova (PhoneGap) 这样的 Web 封装器没有提供我们所寻求的性能或“原生感觉”。Xamarin 是一个出色的跨平台移动开发解决方案,但它对 Web 没有帮助。我们最终决定在 React JS 和 React Native 的基础上构建我们的新客户端。ReactXP 是我们试图统一 React JS 和各种 React Native 实现之间的行为和接口的尝试。(我们最初将其称为 ReactX,因此在源代码中引用了此术语。)
Skype 团队还为 React Native 代码库做出了许多贡献,以修复错误、提高性能并消除 React JS 和 React Native 之间的行为差异。最大的贡献是对 React Native 布局引擎的重大改造。最初的实现大致遵循 W3C Flexbox 标准,但它在一些重要方面与标准有所不同。更新后的布局引擎现在可以可靠地生成与所有符合标准的 Web 浏览器相同的布局。
ReactXP 设计理念
ReactXP 被设计为一个基于 React 和 React Native 的轻量级跨平台抽象层。它实现了十几个或更多的基本组件,可用于构建更复杂的组件。它还实现了一系列大多数应用程序所需的 API 命名空间。
ReactXP 目前支持以下平台:Web (React JS)、iOS (React Native)、Android (React Native) 和 Windows UWP (React Native)。Windows UWP 仍在开发中,有些组件和 API 尚未完成。
ReactXP “核心”只包含通用功能。更专业的跨平台功能可以通过 ReactXP 扩展的形式提供。Skype 团队已经开发了大约二十个这样的扩展,我们计划随着时间的推移将其中一些开源。扩展允许我们扩展 ReactXP 而不增加其占用空间或复杂性。
当我们决定在 ReactXP 中公开哪些 props 和样式属性时,我们试图坚持那些可以在所有支持平台上统一实现的属性。例如,我们不公开任何在 React Native 中也不支持的 HTML 特定的 props 或 CSS 特定的属性。在少数情况下,我们决定公开选定的特定于平台的 props 或样式属性,并将其记录为在其他平台上“无操作”,但这只有在我们找不到其他可行的变通方法时才这样做。
ReactXP 的未来
Skype 团队将继续维护和发展 ReactXP。微软内部的其他团队也开始使用它并做出贡献。今天我们将其开放给更广泛的开源社区。我们希望其他人会觉得它有用,我们欢迎反馈和贡献。
我们计划每月发布一个新版本的 ReactXP,大致与 React Native 的发布保持一致。