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

Vue3中移除Google Maps v3的AdvancedMarkerView时遇类型错误求助

解决Vue3 + Pinia中移除Google Maps AdvancedMarkerView的Proxy错误问题

这个错误是因为Pinia存储的标记对象被Vue的Proxy代理了,而Google Maps的AdvancedMarkerView内部包含不可配置、只读的属性(比如__e3_),直接修改代理对象的map属性时,Proxy的校验逻辑会因为原始对象属性的限制而抛出错误。

给你两个可行的解决办法:

方法1:使用toRaw()获取原始对象后操作

在修改map属性前,先用Vue的toRaw()方法拿到未被代理的原始Marker对象,再执行赋值操作:

import { toRaw } from 'vue'

// 遍历标记并移除
MapItemStore.mapMarkers.forEach((marker) => {
  const rawMarker = toRaw(marker)
  rawMarker.map = null
})
// 清空存储的标记列表
MapItemStore.mapMarkers = []

方法2:存储标记时标记为非响应式

在创建AdvancedMarkerView并添加到Pinia状态时,用markRaw()标记该对象为非响应式,这样Vue就不会对它进行Proxy代理,后续修改map属性就不会触发错误:

import { markRaw } from 'vue'

// 创建标记
const newMarker = new google.maps.marker.AdvancedMarkerView({
  position: { lat: 37.7749, lng: -122.4194 },
  map: yourMapInstance,
  // 其他配置...
})

// 存入Pinia前标记为非响应式
MapItemStore.mapMarkers.push(markRaw(newMarker))

之后再执行你原来的移除逻辑(直接设置marker.map = null)就不会报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:36:28