You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Places API 3.53版本后报错:MutationObserver参数非Node类型

解决方案

1. 确认DOM容器已正确挂载

首先确保组件JSX中存在绑定containerRef的DOM元素,且该元素在useEffect执行时已完成挂载:

// 组件JSX部分添加容器元素,可隐藏不显示
<div ref={containerRef} style={{ display: 'none' }}></div>

同时在useEffect中先校验容器是否存在,避免传入null触发错误:

const containerRef = React.useRef();
React.useEffect(() => {
    if (!containerRef.current) return;
    try {
        const autocompleteService = new google.maps.places.AutocompleteService();
        const placesService = new google.maps.places.PlacesService(containerRef.current);
        // 编写PlacesService的业务逻辑
    } catch (err) {
        console.error('PlacesService初始化失败:', err);
    }
}, []);

2. 移除冗余的Map实例创建

之前通过new google.maps.Map()初始化PlacesService是完全冗余的——PlacesService构造函数直接支持传入HTMLDivElement,不需要依赖Map实例。新版本Google Maps API对Map实例的初始化参数要求更严格,传入未挂载的DOM节点会触发MutationObserver相关错误,直接传入容器DOM即可规避问题。

3. 临时容器方案(无需显示容器)

若组件不需要任何地图相关显示元素,可直接创建离线DOM节点初始化PlacesService,无需在JSX中添加容器:

React.useEffect(() => {
    try {
        const autocompleteService = new google.maps.places.AutocompleteService();
        const tempContainer = document.createElement('div');
        const placesService = new google.maps.places.PlacesService(tempContainer);
        // 编写业务逻辑
    } catch (err) {
        console.error('PlacesService初始化失败:', err);
    }
}, []);

4. 验证API版本与权限

如果以上方法无效,排查以下内容:

  • 确认Google Maps脚本加载时指定了正确版本(未指定版本会自动使用最新版,可能存在兼容性问题)
  • 检查API密钥已正确配置Places服务权限

内容的提问来源于stack exchange,提问作者user22637210

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 17:40:26