React-dnd: Chocando en isOver con targetId vacío

Creado en 7 mar. 2019  ·  7Comentarios  ·  Fuente: react-dnd/react-dnd

Describe el error
Tengo un destino de caída conectado que se elimina del DOM, una vez que se coloca algo sobre él.

Ahora, desde que actualicé a v7.1.0 , obtengo

Uncaught TypeError: Cannot read property '0' of undefined

en la llamada monitor.isOver() dentro de la función collect .
De alguna manera, ve que la función de recopilación aún se llama una vez más, después de que se haya eliminado el destino de colocación ( targetId no está definido).

Interesante

  • La degradación de nuevo a 6.0.0 resolvió el problema.
  • Además, el uso de un envoltorio corto de setTimeout alrededor de mi devolución de llamada que eliminó el destino de caída, resolvió el problema.

¿Alguna idea de qué podría causar eso?

Reproducir
Pasos para reproducir el comportamiento:

  1. Conecte un destino de caída, llame a monitor.isOver() en collect
  2. en el objetivo, envía una acción dentro de drop(...) que elimina el objetivo de caída
  3. Ver error

Comportamiento esperado
No hay ningún problema de tiempo con isOver y los objetivos de caída se pueden eliminar de inmediato.

Capturas de pantalla
bildschirmfoto 2019-03-07 um 00 58 04

Escritorio (complete la siguiente información):

  • SO: os x
  • Chrome del navegador
  • backend reaccionar-dnd / html5 7.1.0

Comentario más útil

Esto debería ser arreglado por el PR de cfrank en un comunicado de hoy.

Todos 7 comentarios

Mismo problema

Intenté revertir este cambio https://github.com/react-dnd/react-dnd/commit/0feb250b7ee90483e31f3bc159ebf946980d53a7#diff -ac418ba19283aec1fb0b70e6570c5613 y resolví ...

Mismo problema.
Esperando arreglo.
Revuelto a v7.0.2

Confirmado que estamos recibiendo el mismo problema: volver a 7.0.2 soluciona el problema

Esto se debe a que el cambio en 0feb250b7ee90483e31f3bc159ebf946980d53a7 permite que el ID del objetivo sea undefined pero nadie verificó el PR con ese cambio por isOverTarget

Actualmente su prototipo es:

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

a diferencia de las otras funciones que cambiaron en ese pr que mueven targetId / sourceId a

targetId: string | undefined
sourceId: string | undefined

y comprobar:

if (!targetId) {
    return false;
}

Una solución para este problema será verificar que targetId sea undefined aquí: https://github.com/mattkrick/react-dnd/blob/aafcf7d67f8b3a2035b561e97b7874e1064447e4/packages/dnd-core/src /DragDropMonitorImpl.ts#L128

Esto debería ser arreglado por el PR de cfrank en un comunicado de hoy.

Increíble chicos, gracias @cfrank

¿Fue útil esta página
0 / 5 - 0 calificaciones