@react-google-maps/api Autocomplete报无法正确加载Google地图错误如何解决?
问题核心成因
触发GoogleIsNotDefined报错、地图无法正常加载的常见原因集中在三点:
- 组件挂载时序错位:直接通过嵌套
LoadScript的方式渲染地图和Autocomplete组件时,没有等Google Maps全局对象加载完成就触发了子组件的初始化逻辑,导致找不到全局google变量 - 谷歌侧API配置不匹配:仅填写API密钥没有完成对应服务开通,或者密钥配置了域名访问限制、配额超限,导致JS脚本加载被拦截
- 库版本兼容问题:旧版本的
@react-google-maps/api存在Autocomplete组件初始化时未校验全局对象存在性的缺陷,官方旧版演示片段也会触发同类报错
修复步骤
- 调整组件加载逻辑,用加载状态判断控制渲染时机
替换原本的嵌套LoadScript写法,改用库提供的useLoadScriptHook精准获取加载状态,脚本未完全加载时不渲染地图和Autocomplete组件,从根源避免找不到全局google变量的问题。
可直接复用的正确实现代码:import React from 'react' import { GoogleMap, Autocomplete, useLoadScript } from '@react-google-maps/api'; const LIBRARIES = ['places']; const containerStyle = { width: '1200px', height: '500px' }; const center = { lat: -3.745, lng: -38.523 }; const Gmap = () => { const { isLoaded, loadError } = useLoadScript({ googleMapsApiKey: process.env.REACT_APP_GOOGLE_MAPS_API_KEY, libraries: LIBRARIES, }); if (loadError) return <div>地图加载失败,请检查API配置</div>; if (!isLoaded) return <div>地图正在加载...</div>; return ( <GoogleMap mapContainerStyle={containerStyle} center={center} zoom={10}> <Autocomplete> <input type="text" placeholder="输入地点搜索" style={{ boxSizing: 'border-box', border: '1px solid transparent', width: '240px', height: '32px', padding: '0 12px', borderRadius: '3px', boxShadow: '0 2px 6px rgba(0, 0, 0, 0.3)', fontSize: '14px', outline: 'none', textOverflow: 'ellipses', position: 'absolute', left: '50%', marginLeft: '-120px', top: '2%' }} /> </Autocomplete> </GoogleMap> ); } export default React.memo(Gmap)
注意:Autocomplete组件依赖
places扩展库,配置加载参数时必须显式声明加载该库,否则自动补全功能会无法正常触发。
核对谷歌云控制台的API配置
确认绑定当前使用的API密钥的项目,已经开通「Maps JavaScript API」和「Places API」两个服务;检查密钥的HTTP来源限制、配额设置,避免脚本加载被拦截。升级依赖版本
将@react-google-maps/api升级到最新稳定版本,解决旧版本中组件初始化的兼容bug。
内容的提问来源于stack exchange,提问作者Ole Nor
相关产品推荐
相关产品推荐

