Skip to content

Commit c49414f

Browse files
committed
fix: Marker created twice in StrictMode
1 parent 1acbe37 commit c49414f

1 file changed

Lines changed: 19 additions & 21 deletions

File tree

src/components/Marker/index.tsx

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { forwardRef, useEffect, useState } from 'react';
22

33
import { MarkerProps } from './type';
44
import { useApplyMarkerEvent } from '../../hooks/useApplyMarkerEvent';
5-
import { importLibrary } from '../../hooks/useImportLibrary';
5+
import { useImportLibrary } from '../../hooks/useImportLibrary';
66
import { passRef } from '../../utils/passRef';
77
import { useSetAnchor } from '../InfoWindow/Context';
88
import { useMapContext } from '../Provider/MapProvider';
@@ -34,41 +34,39 @@ export const Marker = forwardRef<google.maps.Marker, MarkerProps>(
3434
onTitleChanged,
3535
onVisibleChanged,
3636
onZindexChanged,
37-
...markerOptions
37+
...options
3838
},
3939
ref,
4040
) {
4141
const map = useMapContext();
42+
const markerLib = useImportLibrary('marker');
4243
const setAnchor = useSetAnchor();
4344

4445
const [marker, setMarker] = useState<google.maps.Marker | null>(null);
4546

4647
useEffect(() => {
47-
let marker;
48+
if (!markerLib?.Marker) {
49+
return;
50+
}
4851

49-
const loadMarker = async () => {
50-
const markerLib = await importLibrary('marker');
52+
const marker = new markerLib.Marker({
53+
...options,
54+
draggable: !!draggable,
55+
map,
56+
position: { lat, lng },
57+
});
5158

52-
marker = new markerLib.Marker({
53-
...markerOptions,
54-
draggable: !!draggable,
55-
map,
56-
position: { lat, lng },
57-
});
59+
setMarker(marker);
60+
passRef(ref, marker);
5861

59-
setMarker(marker);
60-
passRef(ref, marker);
61-
62-
// for InfoWindow
63-
setAnchor(marker);
64-
};
65-
loadMarker();
62+
// for InfoWindow
63+
setAnchor(marker);
6664

6765
return () => {
6866
marker?.setMap(null);
6967
setAnchor(null);
7068
};
71-
}, []);
69+
}, [markerLib?.Marker]);
7270

7371
useEffect(() => {
7472
marker?.setPosition({ lat, lng });
@@ -79,8 +77,8 @@ export const Marker = forwardRef<google.maps.Marker, MarkerProps>(
7977
}, [draggable]);
8078

8179
useEffect(() => {
82-
marker?.setOptions(markerOptions);
83-
}, [markerOptions]);
80+
marker?.setOptions(options);
81+
}, Object.values(options));
8482

8583
useApplyMarkerEvent(marker, {
8684
onAnimationChanged,

0 commit comments

Comments
 (0)