React-dnd: 使用空的 targetId 在 isOver 中崩溃

创建于 2019-03-07  ·  7评论  ·  资料来源: react-dnd/react-dnd

描述错误
我有一个连接的放置目标,一旦将某些东西放置到它上面,它就会从 DOM 中删除。

现在自从升级到v7.1.0 ,我得到

Uncaught TypeError: Cannot read property '0' of undefined

monitor.isOver()内部调用collect功能。
不知何故,它看到在删除目标后( targetId未定义),collect 函数仍被再次调用。

有趣的

  • 降级回6.0.0解决了该问题。
  • 此外,在我的回调周围使用一个简短的setTimeout包装器来删除放置目标,解决了这个问题。

知道是什么原因造成的吗?

再现
重现行为的步骤:

  1. 连接一个 Drop 目标,在collect调用monitor.isOver() collect
  2. 在目标中,在drop(...)内分派一个移除放置目标的动作
  3. 查看错误

预期行为
isOver没有时间问题,可以立即删除放置目标。

截图
bildschirmfoto 2019-03-07 um 00 58 04

桌面(请填写以下信息):

  • 操作系统:os x
  • 浏览器镀铬
  • react-dnd / html5 后端7.1.0

最有用的评论

这应该由 cfrank 的 PR 在今天的发布中修复

所有7条评论

同样的问题

我试图恢复此更改https://github.com/react-dnd/react-dnd/commit/0feb250b7ee90483e31f3bc159ebf946980d53a7#diff -ac418ba19283aec1fb0b70e6570c.5613。

同样的问题。
等待修复。
回滚到 v7.0.2

确认我们收到了同样的问题 - 恢复到 7.0.2 解决了这个问题

这是因为 0feb250b7ee90483e31f3bc159ebf946980d53a7 处的更改允许目标 ID 为undefined但没有人检查带有该更改的 PR 为isOverTarget

目前它的原型是:

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

与在该 pr 中更改的其他函数不同,这些函数将targetId / sourceId

targetId: string | undefined
sourceId: string | undefined

并检查:

if (!targetId) {
    return false;
}

解决此问题的方法是在此处检查targetId是否undefinedhttps :

这应该由 cfrank 的 PR 在今天的发布中修复

太棒了,伙计们,谢谢@cfrank

此页面是否有帮助?
0 / 5 - 0 等级