ReactXP 库的设计旨在尽可能轻量化,仅包含几乎所有应用都需要的跨平台 API 和“原始”组件。不常用到的功能以可选扩展的形式提供。
扩展有两种不同的类型。
扩展作为独立的 npm 包发布。它们通常以“reactxp-”为前缀。
使用高级组件就像在 React 中使用任何其他组件一样。由于这些组件是基于跨平台 ReactXP 原始组件构建的,因此它们也以跨平台的方式工作。
要在你的应用中使用原始扩展,请像使用任何其他 npm 模块一样将其添加到你的 package.json 中。然后在你想要使用它的代码模块顶部导入它。
这是一个如何使用一个假想扩展的示例,该扩展以跨平台的方式提供视频播放功能。
import RXVideoPlayer from 'reactxp-videoplayer';
class MyVideoPanel extends RX.Component<null, null> {
render() {
return (
<RXVideoPlayer
source={ this.props.source }
showControls={ true }
onProgress={ this._onVideoProgress }
onEnded={ this._onVideoEnded }
/>
);
}
}
一个新的“原始”扩展(无论是组件还是 API 命名空间)必须具有一个跨平台接口,并针对 ReactXP 支持的每个平台提供该接口的平台特定实现。在某些情况下,实现可能在平台之间共享。
应为每个支持的平台提供实现。Web、iOS 和 Android 是必需的。适用于 MacOS 和 Windows 的 React Native 仍在开发中,目前被认为是可选的,但将来可能会成为必需。每个平台的主实现文件名为 index.[platform].js
。对于 Web,平台被省略(即,文件名为 index.js
)。这些实现文件必须位于扩展的发布目录的顶层,但它们通常只是从 dist
目录导入代码。
许多 ReactXP 应用是用 TypeScript 编写的,因此强烈建议所有 ReactXP 扩展提供一个类型定义文件,该文件定义了扩展的跨平台接口。扩展的 package.json
应该引用这个类型文件。例如:"types": "dist/MyExtension.d.ts"
。如果你正在用 TypeScript 实现扩展,编译器可以用来确保每个平台的实现与公共接口匹配。
请参阅文档的“扩展”部分,以获取可用 ReactXP 扩展的完整列表。其中一些位于独立的 git 仓库中,另一些位于 reactxp 仓库的 extensions 目录中。reactxp-video 扩展是一个很好的完整扩展示例,它涉及为每个支持平台编写原生代码。要构建任何这些示例扩展:
reactxp/extensions/video
)。npm install
。npm run build
。生成的代码将位于 dist
目录中。