Я переписываю существующее веб-приложение в приложение React. В оригинале листовка используется для карт вместе с OverlappingMarkerSpiderfier
создать различие между маркерами карты. В новом приложении я использую Reaction-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.
У кого-нибудь есть советы по созданию этого класса или какой-либо другой библиотеки, которая делает что-то очень похожее?