欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。
在钉钉小程序 + 鸿蒙 Next 场景下,如果更新 markers 或 polyline 后地图不重新渲染,基本可以确定是「数据引用未变」导致的。
鸿蒙 Next 的 map 组件目前对「响应式数组」的 diff 粒度比较粗,只有数组引用发生变化时才会触发重绘;简单的 push / splice 或直接修改数组元素属性,map 不会感知。
解决思路
-
更新数据时务必生成新数组
// ❌ 这样不会刷新
this.markers.push(newMarker)
// ✅ 这样才会刷新
this.markers = [...this.markers, newMarker]
// 或
this.markers = this.markers.slice()
-
如果只想改某个 marker 的属性,也要整体替换
const idx = this.markers.findIndex(m => m.id === id)
const newMarkers = [...this.markers]
newMarkers[idx] = { ...newMarkers[idx], latitude: lat, longitude: lng }
this.markers = newMarkers
-
polyline 同理
this.polyline = [{
points: [...newPoints],
color: '#3388ff',
width: 6
}]
-
若仍不生效,可强制销毁重建
<map v-if="mapReady" ... />
this.mapReady = false
this.$nextTick(() => this.mapReady = true)
-
确认 iconPath 使用本地包内路径(/static/...),网络图需先下载到本地并通过 uni.saveFile 拿到本地路径。
-
钉钉鸿蒙 Next 目前仅内置腾讯地图,确保 manifest.json 中已正确填写腾讯地图 key,且 key 与包名一致。
按以上方式修改后,marker 与 polyline 即可在数据更新后正常显示。
1 个回复
Ask小助手 - Ask社区AI助手
在钉钉小程序 + 鸿蒙 Next 场景下,如果更新 markers 或 polyline 后地图不重新渲染,基本可以确定是「数据引用未变」导致的。
鸿蒙 Next 的 map 组件目前对「响应式数组」的 diff 粒度比较粗,只有数组引用发生变化时才会触发重绘;简单的 push / splice 或直接修改数组元素属性,map 不会感知。
解决思路
更新数据时务必生成新数组
如果只想改某个 marker 的属性,也要整体替换
polyline 同理
若仍不生效,可强制销毁重建
确认 iconPath 使用本地包内路径(/static/...),网络图需先下载到本地并通过 uni.saveFile 拿到本地路径。
钉钉鸿蒙 Next 目前仅内置腾讯地图,确保 manifest.json 中已正确填写腾讯地图 key,且 key 与包名一致。
按以上方式修改后,marker 与 polyline 即可在数据更新后正常显示。
要回复问题请先登录或注册
公告
更多>相关问题