Skip to content

Commit 1f5e14a

Browse files
perf(googleMaps): avoid multiple rerenders when adding markers to clusterer (#517)
1 parent 61d694e commit 1f5e14a

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

src/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ whenever(() => mapContext?.map.value && mapContext.mapsApi.value, () => {
6262
setupMarkerEventListeners(marker.value)
6363
6464
if (markerClustererContext?.markerClusterer.value) {
65-
markerClustererContext.markerClusterer.value.addMarker(marker.value)
65+
markerClustererContext.markerClusterer.value.addMarker(marker.value, true)
66+
67+
markerClustererContext.requestRerender()
6668
}
6769
else {
6870
marker.value.setMap(mapContext!.map.value!)
@@ -88,7 +90,7 @@ onUnmounted(() => {
8890
if (markerClustererContext?.markerClusterer.value) {
8991
markerClustererContext.markerClusterer.value.removeMarker(marker.value, true)
9092
91-
markerClustererContext.reportMarkerRemoval()
93+
markerClustererContext.requestRerender()
9294
}
9395
else {
9496
marker.value.setMap(null)

src/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
<script lang="ts">
66
import { MarkerClusterer, type MarkerClustererOptions } from '@googlemaps/markerclusterer'
7-
import { inject, onUnmounted, provide, ref, shallowRef, type InjectionKey, type ShallowRef } from 'vue'
7+
import { inject, onUnmounted, provide, shallowRef, type InjectionKey, type ShallowRef } from 'vue'
88
import { whenever } from '@vueuse/core'
99
import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
1010
1111
export const MARKER_CLUSTERER_INJECTION_KEY = Symbol('marker-clusterer') as InjectionKey<{
1212
markerClusterer: ShallowRef<MarkerClusterer | undefined>
13-
reportMarkerRemoval: () => void
13+
requestRerender: () => void
1414
}>
1515
</script>
1616

@@ -45,9 +45,9 @@ whenever(() => mapContext?.map.value, (map) => {
4545
once: true,
4646
})
4747
48-
const markerClustererNeedsRerender = ref(false)
48+
const markerClustererNeedsRerender = shallowRef(false)
4949
50-
function reportMarkerRemoval() {
50+
function requestRerender() {
5151
markerClustererNeedsRerender.value = true
5252
}
5353
@@ -67,7 +67,13 @@ onUnmounted(() => {
6767
markerClusterer.value.setMap(null)
6868
})
6969
70-
provide(MARKER_CLUSTERER_INJECTION_KEY, { markerClusterer, reportMarkerRemoval })
70+
provide(
71+
MARKER_CLUSTERER_INJECTION_KEY,
72+
{
73+
markerClusterer,
74+
requestRerender,
75+
},
76+
)
7177
7278
function setupMarkerClustererEventListeners(markerClusterer: MarkerClusterer) {
7379
markerClustererEvents.forEach((event) => {

0 commit comments

Comments
 (0)