React Native如何仅在Android平台导入第三方包内的指定函数
解决方案
方案1:单文件内动态取值(最简便)
- 先导入公共依赖和RN内置的Platform模块
import MapView, { Marker } from "react-native-maps"; import { Platform } from "react-native";
- 仅在安卓端动态取PROVIDER_GOOGLE常量,iOS端返回空值
const PROVIDER_GOOGLE = Platform.select({ android: () => require("react-native-maps").PROVIDER_GOOGLE, ios: () => undefined, })();
- 正常使用MapView即可,iOS端provider为undefined时会默认调用苹果地图,不会触发任何谷歌服务相关逻辑
<MapView provider={PROVIDER_GOOGLE} style={{ flex: 1 }} // 其余配置项保持不变 > <Marker coordinate={{ latitude: 39.908860, longitude: 116.397390 }} /> </MapView>
方案2:轻量常量封装(适合多文件复用场景)
如果项目中多处需要用到这个常量,可以拆分出极小的平台特定文件,无需复制整套地图业务代码:
- 新建两个平台特定常量文件:
src/constants/mapProvider.android.js
export const PROVIDER_GOOGLE = require("react-native-maps").PROVIDER_GOOGLE;
src/constants/mapProvider.ios.js
export const PROVIDER_GOOGLE = undefined;
- 业务代码中统一导入即可,RN会自动根据运行平台加载对应文件的内容
import MapView, { Marker } from "react-native-maps"; import { PROVIDER_GOOGLE } from "./constants/mapProvider";
使用方式和方案1完全一致。
内容的提问来源于stack exchange,提问作者Kelton Temby
相关产品推荐
相关产品推荐

