React-dnd: Absturz in isOver mit leerer targetId

Erstellt am 7. März 2019  ·  7Kommentare  ·  Quelle: react-dnd/react-dnd

Beschreibe den Fehler
Ich habe ein verbundenes Ablageziel, das aus dem DOM entfernt wird, sobald etwas darauf abgelegt wird.

Seit dem Upgrade auf v7.1.0 bekomme ich

Uncaught TypeError: Cannot read property '0' of undefined

im monitor.isOver() Aufruf innerhalb der collect Funktion.
Irgendwie sieht es, dass die Collect-Funktion noch einmal aufgerufen wird, nachdem das Drop-Target entfernt wurde ( targetId ist undefiniert).

Interessant

  • Ein Downgrade zurück auf 6.0.0 das Problem behoben.
  • Außerdem wurde das Problem durch die Verwendung eines kurzen setTimeout Wrappers um meinen Rückruf, der das Drop-Ziel entfernte, behoben.

Irgendeine Idee, was das verursachen könnte?

Fortpflanzen
Schritte zum Reproduzieren des Verhaltens:

  1. Verbinden Sie ein Drop-Ziel, rufen Sie monitor.isOver() in collect
  2. Senden Sie im Ziel eine Aktion innerhalb von drop(...) , die das Drop-Ziel entfernt
  3. Siehe Fehler

Erwartetes Verhalten
Es gibt kein Timing-Problem mit isOver und Drop-Ziele können sofort entfernt werden.

Screenshots
bildschirmfoto 2019-03-07 um 00 58 04

Desktop (bitte füllen Sie die folgenden Informationen aus):

  • Betriebssystem: os x
  • Browserchrom
  • reagieren-dnd / html5-Backend 7.1.0

Hilfreichster Kommentar

Dies sollte von cfranks PR in einer heutigen Veröffentlichung behoben werden

Alle 7 Kommentare

Gleicher Fehler

Ich habe versucht, diese Änderung rückgängig zu machen https://github.com/react-dnd/react-dnd/commit/0feb250b7ee90483e31f3bc159ebf946980d53a7#diff -ac418ba19283aec1fb0b70e6570c5613 und gelöst.. .

Gleicher Fehler.
Warten auf Abhilfe.
Zurückgerollt auf v7.0.2

Bestätigt, dass wir das gleiche Problem erhalten – Zurücksetzen auf 7.0.2 behebt das Problem

Dies wird verursacht, weil die Änderung bei 0feb250b7ee90483e31f3bc159ebf946980d53a7 zulässt, dass die Ziel-ID undefined lautet, aber niemand die PR mit dieser Änderung auf isOverTarget überprüft hat

Derzeit ist der Prototyp:

public isOverTarget(targetId: string, options = { shallow: false })

im Gegensatz zu den anderen Funktionen, die sich in diesem pr geändert haben, die targetId / sourceId nach verschieben

targetId: string | undefined
sourceId: string | undefined

und prüfe:

if (!targetId) {
    return false;
}

Eine Lösung für dieses Problem besteht darin, hier zu prüfen, ob targetId undefined ist: https://github.com/mattkrick/react-dnd/blob/aafcf7d67f8b3a2035b561e97b7874e1064447e4/packages/dnd-core/src /DragDropMonitorImpl.ts#L128

Dies sollte von cfranks PR in einer heutigen Veröffentlichung behoben werden

Erstaunlich, Leute, danke @cfrank

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen