[英]Add onClick on MapContainer in Component in 3.x
我正在使用以下版本:
"leaflet": "^1.7.1",
"react-leaflet": "^3.0.2",
我想對地圖點擊執行一些操作,例如添加一個標記。
我嘗試了似乎可行的無狀態組件方法,但由於幾個原因我不太喜歡它。
我嘗試使用eventHandlers
屬性:
render() {
return <div>
<MapContainer center={[ 48, 11 ]} zoom={10} scrollWheelZoom={true} eventHandlers={{
click: () => {
console.log('map clicked')
},
}}>
<TileLayer .../>
</MapContainer>
</div>
}
但它從不開火。
我還閱讀了有關MapConsumer 的信息,但找不到很好的示例。
任何有關在 onClick 事件處理程序中構建的提示都表示贊賞。
TIA
似乎eventHandlers
,盡管它可以作為MapContainer
上的道具使用(如果您在 vscode fi 上按 ctlr + 空格,它將彈出)它在官方API中不可用,並且僅適用於MapContainer
的子組件,請參見此處和這里是標記。
您想要實現的目標可以在單獨的 comp 上使用useMapEvents
實現,然后作為子項包含在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>
);
}
另一種方法是在 MapContainer 上收聽whenReady
道具(未正式記錄,但似乎與whenCreated
道具類似,但MapContainer
實例可通過object.target
訪問):
<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
的子項( docs ):
<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>
第四種方法是在MapContainer
上使用whenCreated
道具(官方記錄):
<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);
});
}}
>
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.