【发布时间】:2019-08-26 12:30:25
【问题描述】:
我正在将现有的 Web 应用程序重写为 React 应用程序。在原版中,leaflet 与 OverlappingMarkerSpiderfier 一起用于地图 创建地图标记之间的区别。在新应用中,我使用的是react-leaflet。使用的所有其他插件都可以做出反应,但我想为 OverlappingMarkerSpiderfier 创建一个传单自定义组件。创建这个组件时我有点不知所措。
理想情况下,我想在 React 渲染循环中这样调用组件。
return (
<Map>
<Spiderfy >
<Marker>
<Popup>
</Popup>
</Marker>
<Marker>
<Popup>
</Popup>
</Marker>
</Spiderfy>
</Map>
)
OverlappingMarkerSpiderfier 示例显示了一个正在创建的对象实例,一个事件监听器被添加到地图中,所有的标记都被添加到 OMS 实例中。我试过把它挤进一个 ReactLeaflet 类,但到目前为止没有成功。
class _Spiderfy extends MapLayer {
constructor(props) {
super(props)
this.oms = null
}
createLeafletElement ({children, leaflet: {map, ...props}}) {
let newLayer = L.featureGroup()
this.oms = new OverlappingMarkerSpiderfier(map);
var popup = new L.Popup();
this.oms.addListener('click', function(marker) {
popup.setContent(marker.desc);
popup.setLatLng(marker.getLatLng());
map.openPopup(popup);
});
this.oms.addListener('spiderfy', function(markers) {
map.closePopup();
});
return newLayer
}
}
export default withLeaflet(_Spiderfy);
这是我目前拥有的包装器。它呈现子项(所有标记及其弹出窗口),但单击地图时不会执行事件侦听器。我也不知道如何从子列表中获取 Marker 对象并将它们添加到 oms 实例中。
对于创建这个类或其他类似的库有什么建议吗?
【问题讨论】: