diff --git a/mapper/src/App.js b/mapper/src/App.js index a93dad9..c748f51 100644 --- a/mapper/src/App.js +++ b/mapper/src/App.js @@ -81,9 +81,26 @@ function MapEvents({ onMapChange }) { const map = useMapEvents({ moveend: () => { const center = map.getCenter(); - onMapChange({ - zoom: map.getZoom(), - center: [center.lat, center.lng], + const newZoom = map.getZoom(); + const newCenter = [center.lat, center.lng]; + + onMapChange(prevState => { + // A small tolerance for floating point comparisons + const tolerance = 1e-5; + if (!prevState.center) { + return { zoom: newZoom, center: newCenter }; + } + + const zoomChanged = prevState.zoom !== newZoom; + const centerChanged = Math.abs(prevState.center[0] - newCenter[0]) > tolerance || + Math.abs(prevState.center[1] - newCenter[1]) > tolerance; + + if (zoomChanged || centerChanged) { + return { zoom: newZoom, center: newCenter }; + } + + // If nothing changed, return the previous state to prevent a re-render + return prevState; }); }, });