android - 如何让 React Native 仅在 Android OS 上从包中获取/导入功能
问题描述
如何仅导入特定平台的功能?
使用react-native-maps时,我只想为 Android 应用程序用户从 react-native-maps 导入 PROVIDER_GOOGLE,这样我就不会过度使用 Google Service API(并利用 Apple Map 缺乏计量的优势)。例如,如果应用程序在 Android 上运行,我只希望导入 PROVIDER_GOOGLE。
import MapView, { Marker, PROVIDER_GOOGLE } from "react-native-maps";
React-Native 文档有什么建议?
React native平台特定代码文档建议了导入组件的方法,但没有显示PROVIDER_GOOGLE
react-native-maps 要求的模式。我希望为两个操作系统导入 react-native-maps 本身。
const Component = Platform.select({
ios: () => require('ComponentIOS'),
android: () => require('ComponentAndroid')
})();
<Component />
建议的另一种模式是拥有一个特定于操作系统的文件,例如
MyMap.ios.js
MyMap.android.js
所以我可以要求组件如下:
import MyMap from './MyMap';
这样我就只能在风味中PROVIDER_GOOGLE
导入。MyMap.android.js
虽然此解决方案有效,但我不得不从字面上复制/粘贴所有其他内容,这似乎效率很低,因此正在寻找一种更好的方法来仅针对特定平台要求该功能本身。
解决方案
让函数存在然后需要包并获取函数
let functionNeeded; if (true) { functionNeeded = require( package ).functionNeeded; }
这对于“require”的经验丰富的用户来说可能是显而易见的,但对我来说不是基于RN 文档甚至类似的问题和答案 SO 1 2。我找到的最好的解决方案是使用 require 来提取包,然后您可以专门获取该功能。
我发现的最有效的解决方案是在一个世博论坛帖子中。在此处重现应用于此问题的模式:
import MapView, { Marker } from "react-native-maps";
let PROVIDER_GOOGLE;
if (Platform.OS == 'android') {
PROVIDER_GOOGLE = require('react-native-maps').PROVIDER_GOOGLE;
}
推荐阅读
- apache-spark - 如何在 Apache Spark 中添加 Hive 支持?
- vba - 使用 VBA 在不丢失幻灯片样式的情况下删除文本的额外空格?
- events - 如何将控件事件数据绑定到 Eto.Forms 中的 ICommand
- qt - 我可以将 QML Map zoomlevel 约束为整数吗?
- jquery - 在我的过渡文本中添加 newLine 的方法
- postgresql - 是否有一个神奇的功能可以从jsonb中提取所有选择键/嵌套键,包括数组
- awk - 如何使用 sed/awk 替换原始文件并获得以下所需的输出?
- python - 尽管退出()和销毁(),Tkinter窗口没有关闭
- sql-server - 在 Python 中执行许多问题 CSV 到 Microsoft SQL Server
- firebase - Vue firebase 托管环境变量