leaflet - 如何监听 react-leaflet 地图的图层控制事件
问题描述
我正在关注这个例子
https://react-leaflet.js.org/docs/example-layers-control
构建一个小型 ionic+react 应用程序。
我怎么能听到每个覆盖层复选框的状态变化?
我想更改地图的中心和缩放以显示活动覆盖层的所有制造商。
解决方案
您可以利用eventHandlers
每一层的道具,它只是可以添加到任何传单层的所有事件处理程序的包装器。因此,您可以利用add
和remove
事件,并在每一层上侦听这些事件。使用 LayersControl 添加和删除图层时会触发这些事件:
<MapContainer {...props}>
<LayersControl collapsed={false}>
<LayersControl.BaseLayer checked name="OpenStreetMap.Mapnik">
<TileLayer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
eventHandlers={{
add: (e) => {
console.log("Added Layer:", e.target);
},
remove: (e) => {
console.log("Removed layer:", e.target);
}
}}
/>
</LayersControl.BaseLayer>
<LayersControl.BaseLayer name="OpenStreetMap.BlackAndWhite">
<TileLayer
url="https://tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png"
eventHandlers={{
add: (e) => {
console.log("Added Layer:", e.target);
},
remove: (e) => {
console.log("Removed layer:", e.target);
}
}}
/>
</LayersControl.BaseLayer>
<LayersControl.Overlay name="Marker with popup">
<Marker
position={center}
eventHandlers={{
add: (e) => {
console.log("Added Layer:", e.target);
},
remove: (e) => {
console.log("Removed layer:", e.target);
}
}}
>
<Popup>
A pretty CSS3 popup. <br /> Easily customizable.
</Popup>
</Marker>
</LayersControl.Overlay>
</LayersControl>
</MapContainer>
工作代码沙盒
推荐阅读
- macos - mariaDB 客户端 - 加载错误版本的 openssl
- html - 嵌套的 div 标签彼此之间没有完全对齐
- reactjs - 带有布尔道具的 ReactJS 三元运算符
- ibm-doors - 有没有办法删除 DXL 布局列中的文本?
- python - 如何检查手头的值是否在某些 PySpark 数据帧的特定列中?
- flutter - Flutter:动态平台图标
- c# - 无法忽略更新数据库中的类类型
- python - 有没有办法在 Python 中简化这种“While 循环”/“For 循环”交互?
- excel - VBA将单元格范围复制到另一个工作簿上的范围
- kubernetes - K8s Pod Anti Affinity for Cronjob Pod 甚至调度