【发布时间】:2021-06-24 10:56:20
【问题描述】:
当我在useEffect 依赖数组中包含currentPosition 或删除它时,代码会变成无限循环。为什么?
我对 map 有同样的问题,但是当我将 map 放在依赖数组中时就可以了。
import { useState, useEffect } from "react";
import { useMap } from "react-leaflet";
import L from "leaflet";
import icon from "./../constants/userIcon";
const UserMarker = () => {
const map = useMap();
const [currentPosition, setCurrentPosition] = useState([
48.856614,
2.3522219,
]);
useEffect(() => {
if (navigator.geolocation) {
let latlng = currentPosition;
const marker = L.marker(latlng, { icon })
.addTo(map)
.bindPopup("Vous êtes ici.");
map.panTo(latlng);
navigator.geolocation.getCurrentPosition(function (position) {
const pos = [position.coords.latitude, position.coords.longitude];
setCurrentPosition(pos);
marker.setLatLng(pos);
map.panTo(pos);
});
} else {
alert("Problème lors de la géolocalisation.");
}
}, [map]);
return null;
};
export default UserMarker;
【问题讨论】:
-
什么是
currentPosition?它不在您提供的代码中。 -
当你在
useEffect的数组第二个参数中放入一个变量,每次变量变化时react都会调用该函数。每次调用useEffect时,您都在更改map变量,导致它被一遍又一遍地调用。您可以添加一个条件来检查它是否具有您期望的数据,如果有,则不更新map。但是,文档显示的示例与您的示例大不相同,也许尝试react-leaflet 方式? -
对不起,我复制了错误的代码!
标签: reactjs leaflet react-leaflet esri-leaflet-geocoder react-leaflet-search