reactjs - 已解决:react-leaflet 地图开启但不更新地理定位,whenCreated 不保存地图实例
问题描述
我没有意识到,但是使用 localhost 你不能从设备访问 GPS 数据——我现在正在使用 ngrok 生成一个可以发送跟踪请求的临时 URL。
此外,我的map
变量现在已正确分配,可以使用如下代码所示:
useEffect(() => {
const mapInterval = setInterval(() => {map.setView(currentLocation)}, 1000);
return () => clearInterval(mapInterval);
}, [map, currentLocation]);
原始问题:
在 Firefox 上,我得到“想要访问您的位置”弹出窗口,并且权限(+“x 分钟前访问”)显示在浏览器的工具栏上,但地图不会更改以显示我的位置。如何使地图实际更新currentLocation
?
另外,我用控制台进行了测试,显然map
是未定义的;大概这意味着whenCreated={setMap}
没有做任何事情。如何保存地图实例?
当前代码如下:
function PageMap(props) {
const [ map, setMap ] = useState(null);
const [currentLocation, setCurrentLocation] = useState([51.505, -0.09]);
useEffect(() => {
navigator.geolocation.getCurrentPosition(
position => setCurrentLocation([position.coords.latitude, position.coords.longitude])
)}, [map]);
const markerIcon = L.icon({
iconUrl: icon,
iconRetinaUrl: icon,
iconAnchor: [5, 55],
popupAnchor: [10, -44],
iconSize: [24, 41],
});
return (
<div className="App">
<div className="Map-background">
<p>
<button className="Button-container" onClick={(() => props.navigate('Home'))}>
Home
</button>
{" "}
<button className="Button-container" onClick={(() => props.navigate('Help'))}>
Help
</button>
</p>
<MapContainer className="Map-container" center={currentLocation} zoom={12} scrollWheelZoom={false} whenCreated={map => setMap(map)}>
<TileLayer
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
</MapContainer>
</div>
</div>
);
};
解决方案
推荐阅读
- reactjs - 在 react-select 中设置禁用选项的样式
- java - 检查java中是否存在第二个参数
- java - 执行 Cucumber 测试时 Spring Boot 休息服务关闭
- python - 这段代码中的“*map()”有什么用?
- reactjs - react + mobx 示例尝试导入错误:“useObservable”未从“mobx-react-lite”导出
- java - Visual Studio 代码上的 javaFX
- google-analytics - 谷歌分析和 GTM 站点搜索与 # 之后的 URL 查询不是吗?
- javascript - 在Angular 7中的页面加载上预先检查多个复选框
- javascript - 您可以在使用 JavaScript 加载页面后更改 lang="" 属性还是浏览器忽略更改?
- python - 使用 datetime 将时间从 OCR 添加到当前时间