React-dnd: Falha em isOver com targetId vazio

Criado em 7 mar. 2019  ·  7Comentários  ·  Fonte: react-dnd/react-dnd

Descreva o bug
Eu tenho um alvo de soltar conectado que é removido do DOM, uma vez que algo é solto nele.

Agora, desde a atualização para v7.1.0 , estou recebendo

Uncaught TypeError: Cannot read property '0' of undefined

na chamada monitor.isOver() dentro da função collect .
De alguma forma, ele vê que a função de coleta ainda é chamada mais uma vez, após a remoção do alvo de soltar ( targetId é indefinido).

Interessante

  • O downgrade para 6.0.0 resolveu o problema.
  • Além disso, o uso de um invólucro setTimeout curto em volta do meu retorno de chamada que removeu o destino de soltar, resolveu o problema.

Alguma ideia do que pode causar isso?

Reproduzir
Passos para reproduzir o comportamento:

  1. Conecte um alvo Drop, chame monitor.isOver() em collect
  2. no alvo, despacha uma ação dentro de drop(...) que remove o alvo de soltar
  3. Ver erro

Comportamento esperado
Não há problema de tempo com isOver e os alvos de descarte podem ser removidos imediatamente.

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

Desktop (preencha as seguintes informações):

  • OS: os x
  • Chrome do navegador
  • react-dnd / html5 backend 7.1.0

Comentários muito úteis

Isso deve ser corrigido pelo PR do cfrank em um comunicado de hoje

Todos 7 comentários

O mesmo problema

Tentei reverter essa alteração https://github.com/react-dnd/react-dnd/commit/0feb250b7ee90483e31f3bc159ebf946980d53a7#diff -ac418ba19283aec1fb0b70e6570c5613 e resolvido ...

O mesmo problema.
Aguardando correção.
Revertido para v7.0.2

Confirmado que estamos recebendo o mesmo problema - a reversão para 7.0.2 corrige o problema

Isso está sendo causado porque a mudança em 0feb250b7ee90483e31f3bc159ebf946980d53a7 está permitindo que o ID do alvo seja undefined mas ninguém verificou o PR com essa mudança para isOverTarget

Atualmente, seu protótipo é:

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

ao contrário das outras funções que mudaram naquele pr que movem targetId / sourceId para

targetId: string | undefined
sourceId: string | undefined

e verifique:

if (!targetId) {
    return false;
}

Uma correção para esse problema será verificar se targetId é undefined aqui: https://github.com/mattkrick/react-dnd/blob/aafcf7d67f8b3a2035b561e97b7874e1064447e4/packages/dnd-core/src /DragDropMonitorImpl.ts#L128

Isso deve ser corrigido pelo PR do cfrank em um comunicado de hoje

Incrível, pessoal, obrigado @cfrank

Esta página foi útil?
0 / 5 - 0 avaliações