亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 3.x 中的 Component 中添加 onClick on MapContainer

在 3.x 中的 Component 中添加 onClick on MapContainer

拉風的咖菲貓 2023-06-15 17:34:37
我正在使用以下版本:"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>? }但它永遠不會開火。任何有關在 onClick 事件處理程序中構建的提示都將受到贊賞。
查看完整描述

1 回答

?
幕布斯6054654

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='&copy; <a >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);

? ? ? ? });

? ? ? }}

? ? >

...




查看完整回答
反對 回復 2023-06-15
  • 1 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號