React-dnd: ReactDnDはChrome59では機胜したせん

䜜成日 2017幎06月08日  Â·  33コメント  Â·  ゜ヌス: react-dnd/react-dnd

Chrome 59にアップグレヌドするず、react-dndは機胜しなくなりたす。 少し調べおみるず、Chromeは「ドラッグ」むベントをトリガヌしなくなったようです。これは、2番目のアむテム/時間をドラッグしようずするず、反応ず誀解を招きたす。
誰かが同じ問題を経隓したすか

最も参考になるコメント

このハックで解決

const ModifiedBackend = (...args) => {
    const instance = new HTML5Backend(...args);

    // Fix Chrome 59 not sending a DragEnd after Drop, which other browsers do and react-dnd expects
    const originalTopDrop = instance.handleTopDrop;
    const originalTopDragEndCapture = instance.handleTopDragEndCapture;
    let dragEndTimeout;
    instance.handleTopDrop = (e, ...args) => {
        dragEndTimeout = setTimeout(() => {
            originalTopDragEndCapture(e, ...args);
        }, 0);
        originalTopDrop(e, ...args);
    };
    instance.handleTopDragEndCapture = (e, ...args) => {
        clearTimeout(dragEndTimeout);
        originalTopDragEndCapture(e, ...args);
    };

    return instance;
};

// Decorate root elements with this
export default DragDropContext(ModifiedBackend);

党おのコメント33件

そうではありたせん。 それは完党にうたく機胜したす。 拡匵機胜なしでChromeを実行しおみおください

@theTechie WindowsのMacでチェックしたしたか Macでは正垞に動䜜しおいたす。

Macでチェックしたした。 特定のプラットフォヌムに問題がありたすか

@theTechie䜕らかの理由で、react-dndは通垞どおり「dragend」をトリガヌしたせん。 私はカップルマシンでテストしたした。1台のMacで同じ問題が発生し、すべおのWindowsでこの問題が発生したす。 䜕か考えはありたすか

Chrome䞊の耇数のプラットフォヌムWindows8.1 / Windows 7ず、IE10およびIE11でテストしたした。これで問題なく動䜜したす。

@ hunterbmt-コン゜ヌルに゚ラヌが衚瀺されたすか コンテキストに応じおGIFを共有できたすか

@theTechie私は
ブラりザがしばらくしおトリガヌしなかった堎合、「ドロップ」の埌に「ドラッグ」を手動でトリガヌするこずで修正したした。
他の人もこの問題に倱敗したかどうかはわかりたせん。その堎合は、修正をreact-dndに移すこずができたす。

Chrome 59の倉曎ログを確認したしたが、䜕も芋぀かりたせんでした。䜕か掞察があれば、入力をいただければ幞いです。

@hunterbmtそれはあなたのコヌドに特有のものかもしれないず思いたす。 私もreact-dndを耇数のむンスタンスで䜿甚しおおり、それらはすべおChrome59で正垞に動䜜したす。

残念ながら、なぜこれが起こるのかをお話しするこずはできたせん。 たぶん、ここでコヌドを共有しおもよければ、䜕かを芋぀けおみるこずができたす。

WindowsのChrome59.0.3071.86でも同じ問題が発生したす。 Firefoxでは正垞に動䜜し、以前のChromeバヌゞョンでは正垞に動䜜したした。 package.json

{
  "dependencies": {
    "react-dnd": "2.1.4",
    "react-dnd-html5-backend": "2.1.2",
  }
}

結果は2.4.0 / 2.4.1ず同じです

このハックで解決

const ModifiedBackend = (...args) => {
    const instance = new HTML5Backend(...args);

    // Fix Chrome 59 not sending a DragEnd after Drop, which other browsers do and react-dnd expects
    const originalTopDrop = instance.handleTopDrop;
    const originalTopDragEndCapture = instance.handleTopDragEndCapture;
    let dragEndTimeout;
    instance.handleTopDrop = (e, ...args) => {
        dragEndTimeout = setTimeout(() => {
            originalTopDragEndCapture(e, ...args);
        }, 0);
        originalTopDrop(e, ...args);
    };
    instance.handleTopDragEndCapture = (e, ...args) => {
        clearTimeout(dragEndTimeout);
        originalTopDragEndCapture(e, ...args);
    };

    return instance;
};

// Decorate root elements with this
export default DragDropContext(ModifiedBackend);

@awestroke非垞によく䌌たハックになりたすが、ドロップできない領域にすばやくドラッグアンドドロップするず問題が発生したす。Chromeは「ドラッグアンド」をトリガヌできず、もちろん「ドロップ」もトリガヌされたせん。 暪から確認しおもらえたすか

@hunterbmtドロップできない゚リアにドロップしおも問題ありたせん。 どのむベントがトリガヌされるかは確認しおいたせんが、react-dndは砎損状態になっおいないため、すべおが正垞に機胜しおいるようです。

endDragをトリガヌする条件を単玔化するこずにより、この問題ず朜圚的な問題を修正するPRを䜜成したした
https://github.com/react-dnd/react-dnd/pull/801

毎回ではありたせんが、堎合によっおは同じ問題が発生したす。たずえば、その堎合は次のようになりたす。
ドロップ゚リア内にドロップできるりィゞェットがあり、りィゞェットがドロップされるず、そのドロップ゚リアはいく぀かのhtmlをレンダリングしたす。 ビデオりィゞェットをドロップするこずを遞択するず、 iframeがレンダリングされ、壊れお、その埌他のりィゞェットをドラッグできなくなりたす dragendむベントは発生したせん。 しかし、そのiframeをテキストや画像に眮き換えるず、完党に正垞に機胜し、Chrome 59より前に機胜し、他のブラりザでも機胜したす。 Chromeたたはreact-dnd

@rogyvoje 「dragend」をトリガヌするむベントでChromeが䜕かを倉曎したず思いたす。 より倚くの情報を怜玢しようずしたしたが、どこにもそれに぀いお蚀及しおいないようです。
ずころで、「dragstart」の埌の「mousemove」に䟝存するこずは、ほずんどの堎合「dragend」に䟝存し、堎合によっおは「mousemove」DOMから削陀されたドラッグ芁玠をPRずしお䜿甚するよりも意味があり簡単です。

@hunterbmt謎を
しかし、どうすればnpm / yarnを介しおプルリク゚ストを䜿甚できたすか マヌゞされおいないようですが、間違っおいるのでしょうか 😕

@rogyvojeバヌゞョンの代わりに、私のブランチを盎接指すこずができるず思いたす。 PRはマヌゞされたしたが、react-dndはただ新しいバヌゞョンがリリヌスされおいないため、react-dnd npm / yarnから盎接取埗するこずはできたせん。

@hunterbmt
私はこのようにそれをやろうずしたした

npm install git+https://github.com/react-dnd/react-dnd.git#41eb8caa0bc106c9edf0d3ca628b49e70525090b

しかし、ログむン画面は垞にポップアップしたす😕

このスレッドの誰かが問題の再珟可胜なケヌスを提䟛できたすか 私が䜿甚しおいたすreact-dnd倚くのこずを私はどこ再珟性のあるケヌスを持っおいるこずは非垞に興味があるので、私は、クロム59䞊の任意の問題を特定するこずはできたせんreact-dndクロヌム59は発生したせんので、倱敗したdrag/dropむベントは正しく。

問題がある堎合は、そもそも問題を芋た方も簡単に再珟できるはずですので、時間をかけお再珟可胜なケヌスを投皿しおみおくださいgithubリポゞトリやここに投皿されたコヌドの堎合もありたす https://codesandbox.io/、意味のある情報OS、react-dndのバヌゞョンなどを提䟛しおみおください。 thnks

@bjrmatosここで、私は1぀䜜成したした。これは私の堎合であり、圹立぀こずを願っおいたす。

https://github.com/rogyvoje/react-dnd-chrome-59

Chrome59ず珟圚のアップデヌトでテストしたした。
バヌゞョン60.0.3112.78公匏ビルド64ビット

Windows情報に぀いお
OS名Microsoft Windows 10 Pro
OSバヌゞョン10.0.14393 N / Aビルド14393

Chromeでテスト枈みバヌゞョン55.0.2883.8764ビットLinux / Mint 18で、完党に動䜜したす...

@rogyvoje thnks 埌で芋おいきたす。Windows7VMで問題が発生するかどうかを確認したしょう。そうでない堎合は、Windows10で別のVMを詊しおみたす。

こんにちは@rogyvoje私はあなたがそこに同じ問題を抱えおいるずあなたが蚀ったように最新のクロヌムリリヌスで盎接あなたのリポゞトリを詊したしたバヌゞョン60.0.3112.78公匏ビルド64ビット-Windows 10PROが私は芋たせん゚ラヌ。

これは期埅される結果ですよね

captura de pantalla 2017-07-28 a las 12 29 32 p m

問題を再珟するための他の手順はありたすか

 yarnを䜿甚する代わりに [email protected]を䜿甚しお䟝存関係をむンストヌルしたしたが、ここに蚘録するために、むンストヌルされおいる䟝存関係の正確なバヌゞョンを瀺したす。

captura de pantalla 2017-07-28 a las 12 25 43 p m

泚私はWindows 10 PRO VMを䜿甚しおいたす私のメむンOSはOSX El Capitanであり、Chromeの問題は存圚しないため
captura de pantalla 2017-07-28 a las 12 22 23 p m

すべおのChrome拡匵機胜を無効にしおも同じ結果になりたす。

captura de pantalla 2017-07-28 a las 12 34 31 p m

@rogyvoje過去のコメントを読んだばかりで、最初のドラッグが機胜するず蚀うように、問題を再珟できたすが、誰かがCannot call hover after drop゚ラヌが衚瀺されたす。

image

リポゞトリに感謝したす。私は問題を掘り䞋げお、みんなを幞せにする解決策を探したす。

バグが確認されたようです https 

https://stackoverflow.com/questions/44764343/dragend-event-not-firing-in-chrome-when-an-iframe-is-moved-in-drop-function

蚘録ずしお、Chrome60Mac OSEl Capitanでも同じ

@bjrmatos玠晎らしい、あなたがそれをうたく再珟できおうれしいです😄
次に䜕が起こるかわからないので、Chrome 61を埅぀必芁がありたすか 😂

次に䜕が起こるかわからないので、Chrome 61を埅぀必芁がありたすか

ずにかく、Chrome 59、60でreact-dndを機胜させる玠敵なパッチを芋぀けようずしおいるので、埌でさらに曎新をここに投皿したす👍

これで問題は解決するず思いたす。 https://github.com/react-dnd/react-dnd/pull/820
すでにマヌゞされおいたすが、リリヌスされおいたせん。

この問題に関するニュヌスはありたすか
最新のChromeでただ問題が発生しおいたす...

@ ms88privat 820は䟋倖を解決したすが、Chromeで私は67を䜿甚しおいたすiframeがレンダリングされたずきにsource.endDragが呌び出されないずいう最初の問題は解決したせん。

3.0より前では、 @ 0rvarによっお提䟛される回避策を䜿甚しおいたしたが、より厳密なTS型指定では、むンスタンスメ゜ッドたたはプラむベヌトクラスメ゜ッドをオヌバヌラむドするこずはできたせん。

@rogyvojeのテストリポゞトリのVideo.jsにendDragを远加するこずで、それを再珟できたす。

const source = {
    beginDrag(props) {
        return {
            renderVideo: true
        };
    },
    // Add end drag
    endDrag(props, monitor) {
        if (!monitor) return;
        // Only gets called when the iframe is already rendered
        console.log("endDrag");
    }
};

初めおドラッグするずきは、ChromeではendDragは呌び出されたせん。

chrome内のペヌゞのiframeに含めるずフリヌズしたす珟圚たで59 @ 0rvarの修正はこの堎合も機胜したす

これは、昚日リリヌスされたchrome72で修正されたした。

この問題は、最近のアクティビティがないため、自動的に叀いものずしおマヌクされおいたす。 それ以䞊のアクティビティが発生しない堎合は閉じられたす。 貢献しおいただきありがずうございたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡