#reactjs #react-hooks #openlayers
#реагирует на #реагируют-крючки #открытые слои
Вопрос:
Я использую карту открытых слоев внутри React. Я прикрепляю его к DOM, используя SetTarget, вот так:
const MapObject = Карта использования(maplayers);
useEffect(() =gt; { mapObject.setTarget(mapRef.current); return () =gt; mapObject amp;amp; mapObject.setTarget(undefined); },[mapObject]);
Внутри useMap.js крюк Я пишу изменения в центре и масштабирование карты обратно в контекст:
const { zoom, setZoom, center, setCenter, } = useContext(MapContext); let mapObject = null; var projection = new olProj.Projection({ code: 'EPSG:25832', units: 'm', }); let options = { target: 'map', controls: olControl.defaults({ rotate: false, zoom: false, attributionOptions: { collapsible: false, }, }), layers: maplayers, view: new ol.View({ projection: projection, center: center, zoom: zoom }), }; mapObject = new ol.Map(options); mapObject.on('moveend', (e) =gt; { console.log('moveend'); setCenter(() =gt; e.target.getView().getCenter()); setZoom(() =gt; e.target.getView().getZoom()); });
Проблема сейчас в том, что вся карта обновляется каждый раз, когда меняется центр и масштаб. Как я могу этого избежать? Единственная идея, которая у меня есть, — использовать useEffect с массивом зависимостей, в котором отсутствует центр и масштаб, но я знаю, что это плохая практика и ее не следует делать.