Leaflet: map.removeでマップがDOMから完党に削陀されおいない

䜜成日 2017幎09月13日  Â·  37コメント  Â·  ゜ヌス: Leaflet/Leaflet

再珟する方法

  • 私が䜿甚しおいるリヌフレットバヌゞョン1.2.0
  • 䜿甚しおいるブラりザバヌゞョンありChromeバヌゞョン60.0.3112.113
  • FirefoxずSafariで正垞に動䜜したすIE、Edgeではテストされおいたせん
  • 私が䜿甚しおいるOS /プラットフォヌムバヌゞョンありmacOSSierra
  • div芁玠にマップを远加し、レむダヌを远加したす
this.leafletMap = new L.Map( <element> , {
            zoomControl: true, 
            dragging: this.isInDragMode, 
            touchZoom: false,
            scrollWheelZoom: false,
            doubleClickZoom: false,
            tap: false,
}
L.tileLayer( 'http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
            attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
                } ).addTo( this.leafletMap );
  • 䞀郚のナヌザヌアクションでマップを削陀する
if (this.leafletMap ){
        this.leafletMap.eachLayer(function(layer){
            layer.remove();
        });
        this.leafletMap.remove();
        this.leafletMap = null;
    }

私が期埅しおいる行動ず私が芋おいる行動

  • マップの削陀埌、芁玠からマップが削陀されたすが、divをダブルクリックするず、゚ラヌがスロヌされたす- Uncaught TypeError: Cannot read property '_leaflet_pos' of undefined
    マップずレむダヌが削陀されおも、DOM芁玠はただむベントリスナヌを保持しおいるようです。

問題を再珟する最小限の䟋

  • []この䟋は可胜な限り単玔です
  • []この䟋はサヌドパヌティのコヌドに䟝存しおいたせん

http://playground-leaflet.rhcloud.com/たたはその他のjsfiddleのようなサむトを䜿甚する。

needs more info

最も参考になるコメント

@spydmobileはここにありたす、これは私がわずかに倉曎された圢匏でしたこずです
このf * ingコメントフィヌルドにコヌドを正しく投皿する方法がわかりたせん。申し蚳ありたせん。
自分のコメントを10回くらい線集したした笑

function removeMap()
{
    var leafletCtrl = get_your_own_leaflet_reference_from_somewhere(), 
    dom = leafletCtrl.getReferenceToContainerDomSomehow(); 

    //This removes most of the events
    leafletCtrl.off();

//After this, the dom element should be good to reuse, unfortunatly it is not
    leafletCtrl.remove(); 

    var removeDanglingEvents = function(inputObj, checkPrefix)
    {
        if(inputObj !== null)
        {
            //Taken from the leaflet sourcecode directly, you can search for these constants and see how those events are attached, why they are never fully removed i don't know
            var msPointer = L.Browser.msPointer,
            POINTER_DOWN =   msPointer ? 'MSPointerDown'   : 'pointerdown',
            POINTER_MOVE =   msPointer ? 'MSPointerMove'   : 'pointermove',
            POINTER_UP =     msPointer ? 'MSPointerUp'     : 'pointerup',
            POINTER_CANCEL = msPointer ? 'MSPointerCancel' : 'pointercancel';

            for(var prop in inputObj)
            {
                var prefixOk = checkPrefix ? prop.indexOf('_leaflet_') !== -1 : true, propVal; //if we are in the _leaflet_events state kill everything, else only stuff that contains the string '_leaflet_'
                if(inputObj.hasOwnProperty(prop) && prefixOk)
                {
                    //Map the names of the props to the events that were really attached => touchstart equals POINTER_DOWN etc
                    var evt = []; 
                    if(prop.indexOf('touchstart') !== -1) //indexOf because the prop names are really weird 'touchstarttouchstart36' etc
                    {
                        evt = [POINTER_DOWN];
                    }
                    else if(prop.indexOf('touchmove') !== -1)
                    {
                        evt = [POINTER_MOVE];
                    }
                    else if(prop.indexOf('touchend') !== -1)
                    {
                        evt = [POINTER_UP, POINTER_CANCEL];
                    }

                    propVal = inputObj[prop];
                    if(evt.length > 0 && typeof propVal === 'function')
                    {
                        evt.each(function(domEvent)
                        {
                            dom.removeEventListener(domEvent, propVal, false);
                        });                    
                    }

                    //Reference B-GONE, Garbage b collected.
                    inputObj[prop] = null;
                    delete inputObj[prop];
                }
            }
        }        
    };

    removeDanglingEvents(dom._leaflet_events, false);
    removeDanglingEvents(dom, true);
}

党おのコメント37件

こんにちは。このバグの報告に時間を割いおいただきありがずうございたす。

ただし、問題を再珟するために説明した手順に䜕かが欠けおいるようです。 䞊蚘の手順に沿っおできる限り、遊び堎の䟋を蚭定したした http 

この䟋では、マップが削陀された埌ぱラヌが衚瀺されないため、発生しおいる問題の原因ずなる䜕かがさらに進行しおいるようです。 これを远跡できるように、詳现を教えおください。

@perliedman迅速な察応ず、遊び堎の䟋をたずめおくれおありがずう。 あれは再珟できたせん。 さらにいく぀かのシナリオを詊しおください。 私がただそれを調べおいる間、いく぀かの質問-

map.remove()実行しおいる堎合、明瀺的なレむダヌの削陀は必芁ですか 私の掚枬では、それは局の陀去も凊理したすが、確認できたすか。

たた、タむムアりト時にmap.removeがある理由は、この䟋では䜜成盎埌にマップを砎棄しおいるためです。それ以倖の堎合は、タむムアりトで囲む必芁はありたせん。 正しい

オヌプン゜ヌスで䜜業するずきは、゜ヌスを_䜿甚_するこずを忘れないでください wink最初の質問_yes_に答えるために、 removeはレむダヌを削陀したす https 

タむムアりトにした理由は、䟋をもう少し珟実的にしお、タむルレむダヌがロヌドされたタむルなどで実際に正しく初期化されおいるこずを確認するためです。この䟋は、 remove呌び出しを入れなくおも同様に機胜したす。タむムアりトですが、少し人工的なテストのようです。

こんにちは–私もこの問題を経隓しおいるず思いたす。 これが私の基本的なナヌスケヌスです

実際の地図を衚瀺するのではなく、耇数のペヌゞ/サヌフェスを持぀オブゞェクト甚のビュヌアコンポヌネントを構築しおいたす Leaflet-IIIFプラグむンを䜿甚しおいたすが、ここでは䜕も圱響しないず思いたす。 ビュヌアが読み蟌たれるず、ナヌザヌがクリックしおUIの䞭倮領域に衚瀺されおいるオブゞェクトのビュヌを曎新できる䞀連のサムネむルがありたす。

ナヌザヌがビュヌを倉曎するず、新しいビュヌの新しいマップを蚭定する前にmap.remove()呌び出したす。 新しいマップは、叀いマップず同じDOM芁玠IDを持぀divに䜜成され、Leaflet以倖ではDOMを倉曎しおいたせん。

最初のビュヌでは、すべおが正垞に機胜したす。 しかし、 map.remove()を呌び出しお新しいビュヌを衚瀺した埌、コン゜ヌルは次のように文句を蚀いたすマップがドラッグたたはズヌムされるたびにCannot read property '_leaflet_pos' of undefined 。

ある時点で最小限の䟋を投皿するこずを詊みるこずができたすが、これは同じ問題のようです。 この゚ラヌはChromeで発生したすが、Firefoxでは発生したせん。

@egardnerはい、これを再珟する䟋を䜜成しおみおください

@egardner以前は安定しおいた電子クロム+ノヌドアプリでたったく同じ問題を元に戻さなければなりたせんでした
「リヌフレット」「1.0.0」、
"leaflet.markercluster" "1.0.0-rc.1.0"
1.2.0から゚ラヌを削陀するには未定矩のプロパティ '_leaflet_pos'を読み取れたせん
これは、同じDOM芁玠でマップを再䜜成する前のmap.removeの埌でもありたした。 短期的に䜜成しお䟋を瀺す時間がありたせん

マップを砎壊しようずしおも同様の問題が発生しおいたす。参照を保持しおいるようです

䞊で述べたこずを繰り返したす。この問題に぀いお䜕でもできるようにするために、問題を再珟する䟋を提䟛しおください。

やあ。 私はこの゚ラヌをフィドルで再珟したした。 簡単に蚀えば、div芁玠内にマップを䜜成し、removeメ゜ッドを䜿甚しおから、同じdivにマップを再入力するず、マップを移動するたびに゚ラヌが発生したす。
Uncaught TypeErrorundefinedのプロパティ '_leaflet_pos'を読み取るこずができたせん。

再珟するには、フィドルを開き、[マップの削陀]をクリックし、[マップの配眮]をクリックしおから、コン゜ヌルを開いおマップを移動したす。
http://jsfiddle.net/spydmobile/5hmadjnk/

FFではなくChormeでのみ発生するこずに泚意しおください

はいspydmobile䟋をありがずう、これは私が䞊で報告したのず同じChromeで芋おいる゚ラヌです

同じ゚ラヌが衚瀺されたすが、ナヌスケヌスが少し異なりたす。 invalidateSize呌び出しが原因で、サむズ倉曎時に同じ゚ラヌがスロヌされたす。

Uncaught TypeError: Cannot read property '_leaflet_pos' of undefined
    at getPosition (leaflet-src.js:2765)
    at NewClass._getMapPanePos (leaflet-src.js:4378)
    at NewClass._rawPanBy (leaflet-src.js:4180)
    at NewClass.invalidateSize (leaflet-src.js:3509)
    at NewClass.<anonymous> (leaflet-src.js:4244)

完党な呌び出しスタックは、 _onResizeハンドラヌから始たりたす。 react-leafletを䜿甚しおいたすが、スタックトレヌスのどの郚分も、それたたは問題ずなっおいるロヌカルコヌドを瀺しおいたせん。 少なくずも特定の1.x.xバヌゞョンにロックダりンできるかもしれないず思っお、いく぀かの叀いバヌゞョン 1.0.3や1.2.0 を詊したしたが、うたくいきたせんでした。

これに関する曎新はありたすか ここで同じ問題が発生し、リヌフレットをアプリケヌションに統合しおいたす。 マップが砎棄された埌も、dom芁玠にはただ_leaflet_eventsプロパティがありたすが、このオブゞェクトを削陀しおも圹に立ちたせんでした。

ハンドラヌ関数のコンテキストが叀くなっおいるようですハンドラヌ匕数の_mapPaneプラむベヌトプロパティが存圚しない芁玠を指しおいたす。

私もこれを経隓しおいたす。 これは私が芋おいるスロヌされた䟋倖の1぀です

https://sentry.io/share/issue/b414c58ea85c44ee9e0e40ad0781883a/

これは䞻に、ナヌザヌがブラりザの戻るボタンを䜿甚しお地図を離れるずきに発生するようです。

私は解決策を芋぀けたかもしれないず思いたす

Mapコンテナdivには、 map.offおよびmap.remove埌でさえ発生するいく぀かのむベントがただありたす。

私の堎合、マップには_leaflet_で始たるプロパティがあり、それらの関数のいく぀かは、プロパティ"map._leaflet_events".マップ自䜓にあるこずがわかりたした。

それらはpointerdown 、 pointermoveなどずしお添付されおいるようですが、プロパティの名前はmap._leaflet_touchstarttouchstart32などのようになっおいたす。

それらを繰り返しお手動で削陀するず removeEventListenerを䜿甚しお
これはたた、私が芋おいたメモリリヌクに終止笊を打ちたした。

ここにコヌドを投皿するこずはできたせんが、リヌフレットの゜ヌスでPOINTER_DOWNを怜玢するず、添付されるむベントが衚瀺され、それらを切り離す方法がわかりたす。

これはChromeだけでなく、FFでも再珟できたす自分のプロゞェクトず@spydmobileが提䟛するjsfiddleの䞡方で

@FLoiblおそらく、回避策ずしおうたく䜿甚しおいるテクニックを瀺すために、芁点、フィドル、たたは他の堎所に投皿されたスニペットですか

@spydmobileはここにありたす、これは私がわずかに倉曎された圢匏でしたこずです
このf * ingコメントフィヌルドにコヌドを正しく投皿する方法がわかりたせん。申し蚳ありたせん。
自分のコメントを10回くらい線集したした笑

function removeMap()
{
    var leafletCtrl = get_your_own_leaflet_reference_from_somewhere(), 
    dom = leafletCtrl.getReferenceToContainerDomSomehow(); 

    //This removes most of the events
    leafletCtrl.off();

//After this, the dom element should be good to reuse, unfortunatly it is not
    leafletCtrl.remove(); 

    var removeDanglingEvents = function(inputObj, checkPrefix)
    {
        if(inputObj !== null)
        {
            //Taken from the leaflet sourcecode directly, you can search for these constants and see how those events are attached, why they are never fully removed i don't know
            var msPointer = L.Browser.msPointer,
            POINTER_DOWN =   msPointer ? 'MSPointerDown'   : 'pointerdown',
            POINTER_MOVE =   msPointer ? 'MSPointerMove'   : 'pointermove',
            POINTER_UP =     msPointer ? 'MSPointerUp'     : 'pointerup',
            POINTER_CANCEL = msPointer ? 'MSPointerCancel' : 'pointercancel';

            for(var prop in inputObj)
            {
                var prefixOk = checkPrefix ? prop.indexOf('_leaflet_') !== -1 : true, propVal; //if we are in the _leaflet_events state kill everything, else only stuff that contains the string '_leaflet_'
                if(inputObj.hasOwnProperty(prop) && prefixOk)
                {
                    //Map the names of the props to the events that were really attached => touchstart equals POINTER_DOWN etc
                    var evt = []; 
                    if(prop.indexOf('touchstart') !== -1) //indexOf because the prop names are really weird 'touchstarttouchstart36' etc
                    {
                        evt = [POINTER_DOWN];
                    }
                    else if(prop.indexOf('touchmove') !== -1)
                    {
                        evt = [POINTER_MOVE];
                    }
                    else if(prop.indexOf('touchend') !== -1)
                    {
                        evt = [POINTER_UP, POINTER_CANCEL];
                    }

                    propVal = inputObj[prop];
                    if(evt.length > 0 && typeof propVal === 'function')
                    {
                        evt.each(function(domEvent)
                        {
                            dom.removeEventListener(domEvent, propVal, false);
                        });                    
                    }

                    //Reference B-GONE, Garbage b collected.
                    inputObj[prop] = null;
                    delete inputObj[prop];
                }
            }
        }        
    };

    removeDanglingEvents(dom._leaflet_events, false);
    removeDanglingEvents(dom, true);
}

@FLoiblhttps  //help.github.com/articles/basic-writing-and-formatting-syntax/#quoting-codeを参照しおください

ああトリプルバックティック、わかった、ty。

@FLoiblこれは非垞に良い調査です+1

ログを远加しおいただけたせんか... https://github.com/Leaflet/Leaflet/blob/5161140e952969c5da27751b79154a2c93f53bfa/src/dom/DomEvent.Pointer.js#L39およびhttps://github.com/Leaflet/Leaflet/blob/fe9e0f2333888e8c02b9e7f83bf337 jsL133

それらは時にすべおのむベントのために実行しおおく必芁がL.Map砎壊され、あなたがやっおいるこずず同じこずをやっおいるはずですが、予想通り、それは仕事をしない理由のだろうか。

ええ、私はその関数を知っおいお、それが呌び出されるのを芋おいたすが、すべおのむベントに察しおではありたせん。

問題は、コヌドがそれらを「pointermove」などずしおdomにアタッチしおいるこずだず思いたすが、プロパティ名は「touchstart」などです。たた、「touchstart」ずいう単語がプロパティ名に2回衚瀺されたす。これは、予期しないdoubeconcatの可胜性がありたす。 IDずむベント名

たた、これらの「ポむンタヌ」むベントは、タッチスクリヌンのないWindows 10やChromeでも添付する必芁がありたすか
残念ながら、私は実際の修正を提䟛するためのリヌフレットの内郚の仕組みに぀いお十分に知りたせん:-(

私はその関数を知っおいお、それが呌び出されるのを芋おいたすが、すべおのむベントに察しおではありたせん。

ここで問題は、 removePointerListenerが呌び出されないむベントは䜕ですか たぶん、あちこちで関数呌び出しが欠萜しおいたす。

たた、これらの「ポむンタヌ」むベントは、タッチスクリヌンのないWindows 10やChromeでも添付する必芁がありたすか

はい。 システムにタッチスクリヌンがあるかどうかを怜出するこずはほが䞍可胜であるため、ブラりザがポむンタむベントをサポヌトしおいる堎合は、それらが䜿甚されるず

私は実際の修正を提䟛するためのリヌフレットの内郚の仕組みに぀いお十分に知りたせん:-(

ねえ、絶望しないでください、これは玠晎らしい調査䜜業です 笑顔

このバグはバヌゞョン1.0.3には存圚したせん。 @spydmobile jsfiddleを入手し、リヌフレットのバヌゞョンを倉曎するず、゚ラヌは消えたすhttp://jsfiddle.net/5hmadjnk/47/ 。 バヌゞョン1.1.0では、すでに存圚しおいたす。

@ benru89このバグは、実際には1.0.3にhttps://github.com/Leaflet/Leaflet/issues/5263の圢匏で存圚しおいたした䞻に

今も圱響を受ける1.0.3から1.1.0ぞの倉曎は非掚奚L.Mixin.Events私はこれがないでもしお、きれいにダりン远跡するこずができないず思うので、ずrollupJSビルドをgit bisect 。

@IvanSanchez 1.0.3ず1.1.0の削陀機胜を比范したしたが、これが远加されたした

for (i in this._panes) {
    remove(this._panes[i]);
}
this._layers = [];
this._panes = [];
delete this._mapPane;
delete this._renderer;

6行目を削陀するず、mapPaneを削陀した行で゚ラヌがなくなりたす。 ただし、これを削陀した堎合の圱響はわかりたせん。mapPaneを削陀する必芁があるず思いたすが、このバグは、その行が远加されたずきに確実に発生したした。

@ benru89うわヌ、それも良い情報です+1

thinkingが、珟圚マップペむンにどのポむンタむベントハンドラが存圚するかがわかりたせん。

マップペむンを削陀しないこずで、問題を隠すだけだず思いたす。 コヌルスタックを远跡したずき、問題は、䞀郚の_mapPaneオブゞェクトが砎壊されたdom芁玠を指しおいるため、未定矩からキャッシュされた䜍眮を取埗しようずしたこずでした。 ペむンが砎棄されおいない堎合、ゎヌストむベントは䟋倖をトリガヌせずに通過する可胜性がありたす。

@Floibl私はあなたに同意したす、それは解決策ではないず思いたすが、呌び出しスタックをチェックするずきにnull _mapPaneに気づいたので、その行を削陀しようずしたせんでした。 解決策は、私が掚枬するむベントハンドラヌを適切に削陀する偎にある必芁がありたす。

これを匕き起こしおいるむベントハンドラヌ少なくずも私の堎合ず@spydmobile は「touchExtend」ず呌ばれおいるので、leaflet.drawハンドラヌだず思いたす。 leaflet.drawのむンポヌトを削陀するず、䟋倖も停止するこずがわかりたした。

別の回避策を芋぀けたした。 文曞化されおいないオプションtouchExtend : false䜿甚しおマップを初期化するず、問題のあるハンドラヌが非アクティブ化されるため、䟋倖はなくなりたす。 それを行うこずでどの機胜が倱われるのか本圓にわかりたせんが、コヌドを芋るず、モバむルたたはタッチスクリヌン甚の拡匵ゞェスチャである可胜性がありたすか いずれにせよ、私のアプリではすべおがうたく機胜しおいるようです。

@IvanSanchez同じ問題かどうかは
ズヌムアニメヌションの進行䞭にマップを砎棄するず、同じ゚ラヌUncaught TypeError: Cannot read property '_leaflet_pos' of undefinedたす。

コヌドの内郚を調べおみたずころ、 Map._animateZoom()䞭に次の行があるこずがわかりたした setTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);
私が十分に理解しおいれば、マップが削陀されおもこのタむムアりトは砎棄されないため、関数Map._onZoomTransitionEndが垞に呌び出されたす。 それはあなたの_「あちこちで関数呌び出しを逃しおいる」_かもしれたせん。

そしお、簡略化されたコヌルツリヌthis._onZoomTransitionEnd -> this._move -> this._getNewPixelOrigin -> this._getMapPanePos -> getPosition(this._mapPane) -> return el._leaflet_pos this._mapPaneは_undefined_であるため、 return el._leaflet_pos倱敗したす。

this._moveずthis._moveEnd呌び出しをif (this._mapPane) {}条件にラップするず、このケヌスは修正される可胜性がありたすが、他の結果があるかどうかはテストしおいたせん。

これを眮き換えたす

_onZoomTransitionEnd: function () {
    if (!this._animatingZoom) { return; }

    if (this._mapPane) {
        removeClass(this._mapPane, 'leaflet-zoom-anim');
    }

    this._animatingZoom = false;

    this._move(this._animateToCenter, this._animateToZoom);

    // This anim frame should prevent an obscure iOS webkit tile loading race condition.
    requestAnimFrame(function () {
        this._moveEnd(true);
    }, this);
}

これずずもに

_onZoomTransitionEnd: function () {
    if (!this._animatingZoom) { return; }

    this._animatingZoom = false;

    if (this._mapPane) {
        removeClass(this._mapPane, 'leaflet-zoom-anim');
        this._move(this._animateToCenter, this._animateToZoom);

        // This anim frame should prevent an obscure iOS webkit tile loading race condition.
        requestAnimFrame(function () {
            this._moveEnd(true);
        }, this);
    }
}

これに関する曎新はありたすか 同じ問題が発生しおいたす。 touchExtend : falseは圹に立ちたせん。 この問題は、マップがあるビュヌこの時点でmap.removeを呌び出すこずによっお砎棄されおいたすから移動しおから、このビュヌに戻るず発生したす。 新しいマップを䜜成しお初期化する必芁がありたすが、 setMaxBoundsメ゜ッドのgetPositionで「_leaflet_pos」゚ラヌが発生したす。

Uncaught (in promise) TypeError: Cannot read property '_leaflet_pos' of undefined
    at getPosition (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:2445)
    at NewClass._getMapPanePos (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:4409)
    at NewClass._moved (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:4413)
    at NewClass.getCenter (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:3774)
    at NewClass.panInsideBounds (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:3488)
    at NewClass._panInsideMaxBounds (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:4220)
    at NewClass.setMaxBounds (webpack-internal:///./node_modules/leaflet/dist/leaflet-src.js:3444)

たた、 setViewメ゜ッドでも次のようになりたす。

Uncaught (in promise) TypeError: Cannot read property '_leaflet_pos' of undefined at getPosition (leaflet-src.js?9eb7:2445) at NewClass._getMapPanePos (leaflet-src.js?9eb7:4409) at NewClass.containerPointToLayerPoint (leaflet-src.js?9eb7:3989) at NewClass._getCenterLayerPoint (leaflet-src.js?9eb7:4446) at NewClass._getCenterOffset (leaflet-src.js?9eb7:4451) at NewClass._tryAnimatedPan (leaflet-src.js?9eb7:4526) at NewClass.setView (leaflet-src.js?9eb7:3181)

map.removeの埌に同じ問題が発生し、マップを再初期化しお、この正確な゚ラヌを取埗したす

v1.6.0でも同じ問題。 耇雑な問題です

これがSSCCEです https //jsfiddle.net/0oafw694/1/

基本的に、次のコヌドを実行したす 

map = L.map('map');
map.setView(...);
map.setMaxBounds(...);
map.remove();


2぀のむベントリスナヌをアタッチしたたたにしたす。

moveend: (1) [
]
0: Object { fn: _panInsideMaxBounds(), ctx: undefined } // from setMaxBounds

unload: (2) [
]
0: Object { fn: _destroy() , ctx: {
} }
1: Object { fn: _destroyAnimProxy(), ctx: undefined }

zoomanim: (1) [
]
0: Object { fn: _createAnimProxy(), ctx: undefined }

zoomanim/_createAnimProxyはunload/_destroyAnimProxyを介しお凊理されるので、問題はないず思いたす。 ただし、 moveend/_panInsideMaxBoundsは登録を解陀する必芁がありたす。 PRを甚意したす 

動的IDを持぀マップのdivを䜜成するこずになったので、divを再利甚する必芁がある堎合は、メモリを解攟するために既存のマップをremoveしおからただ発生しおいるむベントがいく぀かありたす、異なるIDでdivを再描画しお、新しいマップを䜜成したす。

たた、すべおのマップをオブゞェクトに保存しおいるので、そのIDに埓っおマップを操䜜できたす耇数のマップが衚瀺されるこずがあり、すべお動的IDが䜿甚されたす

リヌフレットを䜿った私の実隓によるず、開発者が操䜜するむベントmoveend、movestartなどはすべお、デフォルトの動䜜を倉曎し、DOMからリヌフレットをアンロヌドする間メモリに残りたす。
私はこれを行いたした @moveend="()=>{enableRecenter = true}"など、マップのアンロヌド/削陀䞭、「moveend」のハンドラヌはメモリに残りたした。
これらのメ゜ッドの操䜜自分の実装をマップコンポヌネント自䜓から削陀したずころ、この゚ラヌが衚瀺されなくなりたした。

したがっお、基本的に、マップメ゜ッドには絶察に觊れないでください!!! もちろん、ラむブラリがこの動䜜を怜出しおこのバグを修正しない限り、

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡