React-dnd: 空のtargetIdを使用してisOverでクラッシュする

作成日 2019年03月07日  ·  7コメント  ·  ソース: react-dnd/react-dnd

バグを説明する
何かがドロップされると、DOMから削除される接続されたドロップターゲットがあります。

v7.1.0にアップグレードしてから、

Uncaught TypeError: Cannot read property '0' of undefined

collect関数内のmonitor.isOver()呼び出しで。
どういうわけか、ドロップターゲットが削除された後( targetIdは未定義)、collect関数がまだもう一度呼び出されていることがわかります。

面白い

  • 6.0.0ダウングレードすると、問題が解決しました。
  • また、ドロップターゲットを削除するコールバックの周りに短いsetTimeoutラッパーを使用して、問題を解決しました。

何がそれを引き起こす可能性があるのか​​考えていますか?

再現するには
動作を再現する手順:

  1. ドロップターゲットを接続し、 collect monitor.isOver()を呼び出します
  2. ターゲットで、ドロップターゲットを削除するアクションをdrop(...)内にディスパッチします
  3. エラーを参照してください

予想される行動
isOverはタイミングの問題はなく、ドロップターゲットはすぐに削除できます。

スクリーンショット
bildschirmfoto 2019-03-07 um 00 58 04

デスクトップ(次の情報を入力してください):

  • OS:os x
  • ブラウザクローム
  • react-dnd / html5バックエンド7.1.0

最も参考になるコメント

これは、今日のリリースでcfrankのPRによって修正されるはずです。

全てのコメント7件

同じ問題

この変更を元に戻そうとしましたhttps: //github.com/react-dnd/react-dnd/commit/0feb250b7ee90483e31f3bc159ebf946980d53a7#diff-ac418ba19283aec1fb0b70e6570c5613..。

同じ問題。
修正を待っています。
v7.0.2にロールバック

同じ問題が発生していることを確認しました-7.0.2に戻すと問題が修正されます

これは、0feb250b7ee90483e31f3bc159ebf946980d53a7での変更により、ターゲットIDをundefinedできるようになっているが、その変更でPRをisOverTargetチェックした人がいないために発生しています。

現在のプロトタイプは次のとおりです。

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

targetId / sourceIdをに移動するそのprで変更された他の関数とは異なり

targetId: string | undefined
sourceId: string | undefined

とチェック:

if (!targetId) {
    return false;
}

この問題の修正は、ここでtargetIdundefinedであることを確認することです: https

これは、今日のリリースでcfrankのPRによって修正されるはずです。

すごい、みんな、ありがとう@cfrank

このページは役に立ちましたか?
0 / 5 - 0 評価