Вот список изменений для сохранения маркера по центру при перемещении карты:
1) введите center
состояние, чтобы сохранить положение маркера:
const [center, setCenter] = useState(null);
2) при перемещении карты (через bounds_changed
или drag
прослушиватель событий) обновить текущий center
:
const handleBoundsChanged = () => {
const mapCenter = refMap.current.getCenter(); //get map center
setCenter(mapCenter);
};
где
<GoogleMap
ref={refMap}
onBoundsChanged={handleBoundsChanged}
...
/>
3) маркер положения путем передачи center
состояния:
<Marker position={center} />
Пример
function Map() {
const [center, setCenter] = useState({ lat: 54.68916, lng: 25.2798 });
const refMap = useRef(null);
const handleBoundsChanged = () => {
const mapCenter = refMap.current.getCenter(); //get map center
setCenter(mapCenter);
};
return (
<GoogleMap
ref={refMap}
defaultZoom={13}
defaultCenter={{ lat: 54.68916, lng: 25.2798 }}
onBoundsChanged={useCallback(handleBoundsChanged)}
>
<Marker position={center} />
</GoogleMap>
);
}
Вот демонстрационная версия
Примечание: из-за использования Крючки Реактивная версия 16.8
или выше требуется