1 回答
TA贡献1876条经验 获得超7个赞
似乎eventHandlers
,虽然它可以作为道具使用MapContainer
(如果你在 vscode fi 上按 ctlr + 空格,它会弹出)但它在官方API中不可用并且仅适用于的子组件MapContainer。
您想要实现的目标可以useMapEvents
在单独的 comp 上使用来实现,然后作为子项包含在MapContainer
:
function App() {
function MyComponent() {
const map = useMapEvents({
click: (e) => {
const { lat, lng } = e.latlng;
L.marker([lat, lng], { icon }).addTo(map);
}
});
return null;
}
return (
<MapContainer center={[50.5, 30.5]} zoom={13} style={{ height: "100vh" }}>
<TileLayer
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
<MyComponent />
</MapContainer>
);
}
另一种方法是在 listen whenReadyprop(没有正式记录,但似乎与whenCreatedprop 类似,但地图实例可通过访问object.target)MapContainer:
<MapContainer
center={[50.5, 30.5]}
zoom={13}
style={{ height: "100vh" }}
whenReady={(map) => {
console.log(map);
map.target.on("click", function (e) {
const { lat, lng } = e.latlng;
L.marker([lat, lng], { icon }).addTo(map.target);
});
}}
>
...
</MapContainer>
第三种方法是作为(MapConsumer
)的孩子使用:MapContainer
<MapContainer center={[50.5, 30.5]} zoom={13}>
<MapConsumer>
{(map) => {
console.log("map center:", map.getCenter());
map.on("click", function (e) {
const { lat, lng } = e.latlng;
L.marker([lat, lng], { icon }).addTo(map);
});
return null;
}}
</MapConsumer>
</MapContainer>
第四种方法是使用whenCreatedprop(官方记录)MapContainer:
<MapContainer
center={[50.5, 30.5]}
zoom={13}
style={{ height: "100vh" }}
whenCreated={(map) => {
map.on("click", function (e) {
const { lat, lng } = e.latlng;
L.marker([lat, lng], { icon }).addTo(map.target);
});
}}
>
...
添加回答
举报