leaflet-plugins icon indicating copy to clipboard operation
leaflet-plugins copied to clipboard

The problem of using "Yandex.js" with "react-leaflet" plugin

Open azolotova-sc opened this issue 5 years ago • 2 comments

Hi, I managed to draw a Yandex map using react-leaflet, but after switching to a different route, an error occurs in the Yandex plugin. During debugging, it turned out that the destroy () event occurs earlier than this._container.remove (), and the other component is not rendered, because container no longer exists

mapa

MapPage.tsx

<MapLeaflet center={ [55.7558, 37.6173]} zoom={13} style={{width: '800px', height: '800px'}}> <LayersControlReact position="topright"> <LayersControlReact.BaseLayer name="Yandex Traffic" checked={true}> <YandexTileLayer type="map" traffic /> </LayersControlReact.BaseLayer> </MapLeaflet>

Yandex.js

_destroy: function (e) { if (!this._map || this._map === e.target) { if (this._yandex) { this._yandex.destroy(); delete this._yandex; } delete this._container; } }, _setEvents: function (map) { var events = { move: this._update }; if (this._zoomAnimated) { events.zoomanim = this._animateZoom; events.zoomend = this._animateZoomEnd; } map.on(events, this); this.once('remove', function () { map.off(events, this); this._container.remove(); // we do not call this until api is initialized (ymaps API expects DOM element) }, this); },

Ошибка

mistake

azolotova-sc avatar Feb 03 '21 09:02 azolotova-sc

the destroy () event occurs before this._container.remove (),

Is that wrong?

johnd0e avatar Feb 03 '21 10:02 johnd0e

I've just removed this line. I do not understand its purpose as there is another remove() in the code: https://github.com/shramov/leaflet-plugins/blob/master/layer/tile/Yandex.js#L161

andreynovikov avatar Mar 03 '23 13:03 andreynovikov