Expo+TypeScript引入google-map-react报div组件配置错误
问题根因
依赖选型错误。google-map-react是纯React Web生态的库,内部直接渲染div这类Web原生DOM元素,React Native(包括Expo的iOS、Android原生运行环境)没有DOM组件体系,无法识别这类元素,这就是报错提示找不到div对应视图配置的直接原因。你之前尝试的升级React版本、重装Node、重装expo-cli、切换JavaScript开发、修改package.json依赖配置这些操作都没有触及问题本质,自然无法解决问题。
解决方案
根据你的目标运行场景二选一即可:
- 如果你只需要开发Expo Web端应用:不要在iOS/Android原生端(Expo Go)调试,直接执行
expo start --web启动Web调试服务,google-map-react就可以正常渲染。注意你代码里写的100vw、100vh是Web专属单位,仅在Web端生效,原生端不识别。 - 如果你需要兼容iOS/Android原生端:直接卸载
google-map-react,使用Expo生态官方适配的跨端地图库react-native-maps,操作步骤如下:- 卸载无用依赖
npm uninstall google-map-react @types/google-map-react - 安装适配Expo版本的地图库
expo install react-native-maps - 替换原有地图代码,适配RN组件写法,参考实现如下:
import React, { useState } from "react"; import { View, StyleSheet } from 'react-native'; import MapView, { Region } from 'react-native-maps'; const API_KEY = "MyGoogleApiToken"; // 初始定位区域,latitudeDelta/longitudeDelta控制地图缩放级别,数值越小缩放程度越高 const initialRegion: Region = { latitude: 35.39, longitude: 139.44, latitudeDelta: 0.005, longitudeDelta: 0.005, }; export default function Apps() { const [region, setRegion] = useState<Region>(initialRegion); return ( <View style={styles.container}> <MapView style={styles.map} initialRegion={region} onRegionChangeComplete={setRegion} provider="google" apiKey={API_KEY} /> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, }, map: { width: '100%', height: '100%', } }) - 原生端运行前需要在项目的app.json配置文件中,对应iOS、Android字段下填入你申请的Google Maps API密钥,Web端会自动适配不需要额外配置。
- 卸载无用依赖
避坑提示
后续选RN/Expo依赖时,优先选名称带react-native-前缀、文档明确说明支持React Native的库。凡是面向纯React Web开发的库,只要内部直接操作DOM、渲染div/span这类Web元素,在原生端运行都会报同类视图配置错误。你项目里已经安装的react-native-webview虽然也可以通过嵌入网页的方式加载Google地图,但交互体验、加载性能都远差于原生地图组件,非特殊场景不推荐使用。
内容的提问来源于stack exchange,提问作者user174702
相关产品推荐
相关产品推荐

