fix: prevent infinite loop by checking map state on moveend
This commit is contained in:
@@ -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;
|
||||
});
|
||||
},
|
||||
});
|
||||
|
Reference in New Issue
Block a user