Для того чтобы сохранить пин (или маркер) в центре карты при движении, мы можем воспользоваться функциональностью React и некоторыми методами библиотеки, используемой для работы с картами, например, Leaflet или Google Maps.
Прежде чем начать, вам потребуется импортировать и настроить карту вашей выбранной библиотеки в вашем проекте React. Предположим, что вы используете Leaflet.
- Установите библиотеку Leaflet, выполнив команду в вашей командной строке:
npm install leaflet
- Импортируйте необходимые компоненты в вашем компоненте React:
import React, { useEffect, useRef, useState } from 'react'; import { MapContainer, Marker } from 'react-leaflet';
- Создайте функциональный компонент React (или обновите свой существующий компонент):
const MapWithMarker = () => { const [center, setCenter] = useState([51.505, -0.09]); const mapRef = useRef(null); useEffect(() => { const map = mapRef.current; if (map) { map.on('move', () => { const newCenter = map.getCenter(); setCenter([newCenter.lat, newCenter.lng]); }); } }, []); // Ваш код для установки начального состояния карты и остальной функциональности return ( <MapContainer center={center} zoom={13} ref={mapRef}> {/* Ваш код для добавления слоев карты */} <Marker position={center} /> </MapContainer> ); }; export default MapWithMarker;
- Внутри компонента
MapWithMarker
мы используемuseState
для отслеживание текущего центра карты иuseRef
для получения ссылки на карту Leaflet. ВuseEffect
мы добавляем прослушиватель на событиеmove
карты, чтобы обновить центр при каждом ее движении. Мы устанавливаем начальное состояние центра на[51.505, -0.09]
, но вы можете выбрать любое начальное значение по вашему усмотрению.
- Внутри возвращаемого JSX мы устанавливаем
center
в качестве значения свойстваcenter
в компонентеMapContainer
, чтобы обновить позиционирование слоя карты. Мы также добавляем компонент маркераMarker
с позицией равнойcenter
, чтобы отображать пин в центре карты.
Обратите внимание, что данный пример предназначен для демонстрации концепции и может требовать дополнительной настройки и стилей в зависимости от того, как вы работаете с конкретной библиотекой карт и какую функциональность вы хотите добавить.
В целом, подход остается примерно таким же вне зависимости от того, какую библиотеку для работы с картами вы выбрали. Вам просто нужно сделать несколько адаптаций в соответствии с API выбранной библиотеки.