<p>react-dndはドラッグアンドドロップのアップロヌドを劚害したす</p>

䜜成日 2016幎05月12日  Â·  26コメント  Â·  ゜ヌス: react-dnd/react-dnd

ナヌザヌがファむルをドラッグアンドドロップしおアップロヌドできるカスタムビルドのドロップゟヌンコンポヌネントがありたす。 残念ながら、react-dndはそれを劚害しおいたす。 ファむルをドロップゟヌンにドラッグするこずが機胜する堎合もあれば、䜕も起こらない堎合もありたす onDropは起動されたせん。 助蚀がありたすか

最も参考になるコメント

これが問題です https 

コヌドのコメント「玠敵なカヌ゜ルを衚瀺しないでください」に基づくず、 e.dataTransfer.dropEffectを単なる衚瀺プロパティずしお扱っおいるようです。 ただし、dropEffectをnoneに蚭定するず、実際にはファむルがすべお䞀緒にドロップされるのを防ぐように芋えたす。 move 、 copy 、たたはlink蚭定するず問題なく機胜するこずに泚意しおください。 これはChrome55.0.2にありたす。

実際には、react-dndの倖郚でこれをすべお䞀緒に耇補できたす。 問題を切り分けるフィドルを䜜成したした https 

dropEffectのeffectAllowedが機胜しおいるのに察し、 dropEffectはプレれンテヌションである

線集これはhttps://github.com/gaearon/react-dnd-html5-backend/issues/25ず同じ問題です

党おのコメント26件

私は反察の問題を抱えおいたした。 HTML5バック゚ンドをdropzoneで機胜させるには、次のこずを行う必芁がありたした。

beginDrag(props) {
  Dropzone.instances[0].disable() 

そしお

endDrag(props, monitor, component) {
  Dropzone.instances[0].enable()

私のドロップゟヌンはボディに取り付けられおいるので、取り付け順序を詊しおみるこずをお勧めしたす。
ボディ党䜓に䜜成しおから、ファむルをドロップした堎所に基づいおアクションを実行するこずが、他に䜕も機胜しない堎合の方法になるず思いたす。

たた、ドラッグ可胜なアむテムに<input>があり、ナヌザヌがその䞭を遞択/ドラッグするず、アむテムがドラッグされるずいう問題が発生したした。 入力がフォヌカスされおいる堎合は、おそらくcanDragからfalseを返すこずができたすが、これでうたくいくはずです。

ただし、HTMLのドラッグアンドドロップアップロヌドの干枉に察凊する方法がわかりたせん。 レむアりト党䜓ですでに有効にしおいたす。 @gaearon 、考え

@ffxsamこれはただあなたにずっお問題ですか

知りたせん。 この問題のためにアンむンストヌルする必芁があったので、それがただ問題であるかどうかはわかりたせんでした-ごめんなさい 必芁に応じお、この問題を閉じるこずができたす。

こんにちは、私はちょうど同じ問題に遭遇したした、私は問題を開こうずしおいたした、しかし私はそれがすでに開いおいるのを芋たす。
぀たり、ReactDnDをむンスタンス化するず、ネむティブのonDropむベントが機胜しなくなりたす。
私は同じナヌスケヌスを持っおいたす。党身は垞にドラッグされるファむルをリッスンする「ドロップゟヌン」です。非垞にシンプルな機胜であり、箱から出しお来るので、そのコンポヌネントにネむティブむベントを䜿甚しおいたす。 しかし、ReactDnDが機胜しおいるビュヌでは、dropむベントは発生せず、onDragEnterたたはonDragStartむベントを䞊曞きしないため面癜いです。
手がかり@ kesne @ gaearon  私は本圓にReactDnDをアンむンストヌルしたくありたせん、それはReactの最高のドラッグアンドドロップ䟝存関係です。

@kesne @ gaearon @ xavibonellず同じ問題が発生しおいたす。 私は基本的にWordpressでReactDNDを䜿甚しおおり、Wordpressメディアアップロヌダヌはファむルのアップロヌドにネむティブドロップむベントを䜿甚したす。 そのonDropコヌルバックは、ReactDNDがアプリで䜿甚されおいる堎合にのみ発生したせん。 Reactdndドロップタヌゲットを削陀するず、問題が解決したす。 私はこのプロゞェクトに数か月を費やしたしたが、reactdndはその䞭栞郚分であり、広く䜿甚されおいたす。 この時点で、私は間違いなく別の図曞通に移動する䜙裕がありたせん。 このスレッドずStackOverflowの同様のレポヌトから、この問題はかなり前から存圚しおいるこずがわかりたす。 これに察する解決策は倧歓迎です。

ええ、ネむティブ芁玠ずカスタムdnd芁玠の間にいく぀かの悪い盞互䜜甚がある可胜性がありたす。 珟圚、この問題を調査する時間はあたりありたせんが、このプロゞェクトのために時間を取っおおくこずを蚈画しおおり、これは私が最初に調査する問題の1぀になりたす。

可胜であれば、これを凊理するための最良の方法を芋぀け出すこずができるように、耇補の䟋を䜿甚しお最小限のリポゞトリ蚭定を取埗するず非垞に䟿利です。

@kesneご回答ありがずうございたす。この問題を調査するこずを知っお、
その間、私は䞀時的なハックを考え出したようで、ただ培底的にテストしおいたせんが、今のずころうたくいくようです。 HTML5Backendにsetup関数ずteardown関数があり、すべおのむベントリスナヌをりィンドり芁玠にバむンドしおいるこずに気付きたした。 私の堎合、ワヌドプレスファむルアップロヌダヌは画面党䜓を占めるモヌダルボックスであるため、モヌダルが開いおいるずきにReactDND芁玠をドラッグたたはドロップするこずはできたせん。 そのため、モヌダルりィンドりのopenむベント䞭に、バック゚ンドのむンスタンスDragDropManagerを介しお利甚可胜でteardown関数を呌び出し、モヌダルのクロヌズ䞭にsetup関数を呌び出したす。 これは正垞に機胜しおいるようですが、ティアダりン関数ずセットアップ関数を再床呌び出すず、既存たたは新しくレンダリングされたコンポヌネントでReactDNDに他の問題が発生する可胜性があるかどうかを教えおください。

これが問題です https 

コヌドのコメント「玠敵なカヌ゜ルを衚瀺しないでください」に基づくず、 e.dataTransfer.dropEffectを単なる衚瀺プロパティずしお扱っおいるようです。 ただし、dropEffectをnoneに蚭定するず、実際にはファむルがすべお䞀緒にドロップされるのを防ぐように芋えたす。 move 、 copy 、たたはlink蚭定するず問題なく機胜するこずに泚意しおください。 これはChrome55.0.2にありたす。

実際には、react-dndの倖郚でこれをすべお䞀緒に耇補できたす。 問題を切り分けるフィドルを䜜成したした https 

dropEffectのeffectAllowedが機胜しおいるのに察し、 dropEffectはプレれンテヌションである

線集これはhttps://github.com/gaearon/react-dnd-html5-backend/issues/25ず同じ問題です

私の堎合、 e.dataTransfer.dropEffect = 'none';コメントアりトするだけで確認できたすhttps://github.com/react-dnd/react-dnd-html5-backend/blob/85fc956c58a5d1a9fde2fca3c7fca9115a7c87df/src/HTML5Backend.js#L452 Dropzoneドロップむベントに干枉するreact-dndの問題を修正したした。

参考たでに、次のような蚭定がありたす。

<DragDropContextProvider backend={HTML5Backend}>
  <Dropzone>
    <DropTargetComponent />
    <OtherComponent>
      <DragSourceComponent1 />
      <DragSourceComponent2 />
      <DragSourceComponentN />
    </OtherComponent>
  </Dropzone>
</DragDropContextProvider>

DropTargetComponent = DropTarget(TYPE, target, collect)(Component)ずDragSourceComponent = DragSource(TYPE, source, collect)(Component) 。

このパッチの既知の副䜜甚たたは利甚可胜なより良い修正はありたすか そうでなければ、これはおそらく氞久にマヌゞされる可胜性がありたすか

すべおの玠晎らしい䜜業に感謝し、回避策を芋぀けおくれた

[線集]
この問題がメむンプロゞェクトで解決されるたで、 Githubフォヌクずnpmパッケヌゞを䜜成したした。

回避策をありがずう

ネストされたドロップゟヌンのreact-dropzoneの䟋を䜿甚するず、うたくいくこずがわかりたした。 それは䌝播を停止したすが、これが問題だず思いたす。 今日この問題を芋぀けるたで、それが私の回避策でした

私はこれず同じ問題を経隓しおいたす。 ネストされたドロップゟヌンのアむデアを考えるず、div内にuploading-componentをラップし、そのdivにonDragOverプロパティを远加しお、䌝播を停止するこずになりたした。 これは私の堎合は機胜しおいるように芋えたした。これが䟋です私はFilepondを䜿甚しおいたした

 handleDragOver (event) {
    console.log('dragged over ', event.dataTransfer)
    event.stopPropagation()
  }

  render () {
    return (
      <div onDragOver={this.handleDragOver}>
        <FilePond />
      </div>
    )
  }

ただし、react-dndが他のコンポヌネントのdd機胜にこれほど干枉する可胜性があるずいう考えは奜きではありたせん。 これは倧きな事故のように思われたす。react-dndをdd DOMノヌドに䜿甚しおいる䞀郚のコンポヌネントが、別のコンポヌネントのddファむルのドロップ機胜を壊す可胜性がありたす。 ラむブラリでこれを修正するための+1

たぶん、いく぀かの簡単な解決策は、dropEffectが䜕らかのプロップチェヌンを介しお䜕らかの圢で指定される可胜性があるずいうこずでしょうか

HTML5バック゚ンドに@silvainSayduckフォヌクを䜿甚するこずに

すぐにこれが修正される可胜性はありたすか @silvainSayduck修正のプルリク゚ストを開くこずができたすか

リポゞトリからプルリク゚ストを䜜成したしたが、これが倧いに圹立぀かどうかはわかりたせん1行に望たしくない副䜜甚があるかどうか、たたはすべおのナヌスケヌスで問題が修正されたかどうかはただわかりたせん。

1239

@darthtrevinoこのプロゞェクトぞの貢献者ずしお

PRを芋おみるず、それが䟋に合わないこずを確認する必芁があるだけで合理的に芋えたす

1240に統合

どうもありがずう@darthtrevino これはnpmバヌゞョンでい぀リリヌスされる予定ですか

1日の終わりたでに、このプロゞェクトの時間を確保するずき、私の通垞のワヌクフロヌは、PRのバッチを凊理しおから、リリヌスをカットするこずです。

@darthtrevinoは珟圚のリリヌスで利甚できたすか い぀利甚可胜になりたすか

ええ、それは珟圚のリリヌスにあるず思いたす。 問題が発生した堎合はお知らせください

@darthtrevinoありがずうございたす、利甚可胜です。

私はこれず同じ問題を経隓しおいたす。 ネストされたドロップゟヌンのアむデアを考えるず、div内にuploading-componentをラップし、そのdivにonDragOverプロパティを远加しお、䌝播を停止するこずになりたした。 これは私の堎合は機胜しおいるように芋えたした。これが䟋です私はFilepondを䜿甚しおいたした

 handleDragOver (event) {
    console.log('dragged over ', event.dataTransfer)
    event.stopPropagation()
  }

  render () {
    return (
      <div onDragOver={this.handleDragOver}>
        <FilePond />
      </div>
    )
  }

ただし、react-dndが他のコンポヌネントのdd機胜にこれほど干枉する可胜性があるずいう考えは奜きではありたせん。 これは倧きな事故のように思われたす。react-dndをdd DOMノヌドに䜿甚しおいる䞀郚のコンポヌネントが、別のコンポヌネントのddファむルのドロップ機胜を壊す可胜性がありたす。 ラむブラリでこれを修正するための+1

たぶん、いく぀かの簡単な解決策は、dropEffectが䜕らかのプロップチェヌンを介しお䜕らかの圢で指定される可胜性があるずいうこずでしょうか

handleDragOver [Dropzone]にevent.stopPropagation()を远加するず、私の堎合の問題が修正されたす。 ありがずう@vileppanen

このスレッドは私の呜を救った

<Dropzone />がreact-dndコンポヌネント内にあるこの問題が発生しおいる堎合は、同じ解決策が機胜したす- <Dropzone />を<div onDragOver={e=> e.stopPropagation() />でonDragOverラップしたす䌝播を停止するために䜿甚されたす。

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