应用程序.js
import { useState } from 'react';
const App = () => {
// This state is used to the center attribute of MapContainer component
const [mapCenter, setMapCenter] = useState([34.80746, -40.4796]);
// This state is used to the zoom attribute of MapContainer component
const [mapZoom, setMapZoom] = useState(3);
const onClickHandler = () => {
setMapCenter([20, 100]);
setMapZoom(5);
};
return (
<>
<button onClick={onClickHandler}>Change map's center location</button>
<Map center={mapCenter} zoom={mapZoom} />
</>
);
};
Run Code Online (Sandbox Code Playgroud)
地图.js
import React from 'react';
import './Map.css';
import { MapContainer, TileLayer } from 'react-leaflet';
function Map({ center, zoom }) {
return (
<div className="map">
<MapContainer center={center} zoom={zoom}>
<TileLayer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
attribution='© <a
href="http://osm.org/copyright">OpenStreetMap</a> contributors'
/>
</MapContainer>
</div>
);
}
export default Map;
Run Code Online (Sandbox Code Playgroud)
地图文件
.map {
height: 500px;
background-color: white;
padding: 1rem;
border-radius: 20px;
margin-top: 16px;
box-shadow: 0 0 8px -4px rgba(0, 0, 0, 0.5);
}
.map .leaflet-container {
height: 100%;
}
Run Code Online (Sandbox Code Playgroud)
当我单击按钮时,mapCenter 状态明显更改为 [20, 100] 并且 mapZoom 也更改为 5。但在 Map Component Map 中没有显示新的中心。但我不知道为什么。我已经检查了状态的变化。地图从不响应。有人知道吗???请回答一个弄清楚的方法。
0xn*_*oob 16
除了 its
children,MapContainerprops 是不可变的:在第一次设置后更改它们不会对 Map 实例或其容器产生影响。由 MapContainer 元素创建的 Leaflet Map 实例可以由使用提供的钩子之一或 MapConsumer 组件的子组件访问。
https://react-leaflet.js.org/docs/api-map
更改视图.js
function ChangeView({ center, zoom }) {
const map = useMap();
map.setView(center, zoom);
return null;
}
Run Code Online (Sandbox Code Playgroud)
地图.js
function Map({ center, zoom }) {
return (
<div className="map">
<MapContainer center={center} zoom={zoom} scrollWheelZoom={false}>
<ChangeView center={center} zoom={zoom} />
<TileLayer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
/>
</MapContainer>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
react-leaflet 文档setCenter在其useMapEvent 示例中使用,但未定义此函数。然而,在传单文档中,修改地图状态的方法有一个函数setView(center, zoom, options?)。
小智 5
const Map = ({ center, zoom }) => {
const [map, setmap] = useState(null);
if (map) {
map.flyTo(center);
}
return (
<div className="map">
<LeafletMap
center={center}
zoom={zoom}
whenCreated={setmap}
scrollWheelZoom={false}
>
<TileLayer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
></TileLayer>
</LeafletMap>
</div>
);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4243 次 |
| 最近记录: |