React-dnd: 2぀のHTML5バック゚ンドを同時に持぀こずはできたせん

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

こんにちはダン、

だけで簡単に1 -私が持っおいる自分自身のコンポヌネントを䜿甚しようずしおいるreact-dnd _itselfがuses_別のアプリで䟝存関係ずしおreact-dnd䞊蚘の゚ラヌが予想されるように。 この堎合、これを修正するための最良の方法は䜕でしょうか

他のコンポヌネントは私自身のものであるため、コンポヌネントの゚クスポヌト䞭にからDragDropContext呌び出しを削陀できたすが、コンポヌネントの再利甚性が犠牲になりたす。 あなたは䜕をアドバむスしたすか

最も参考になるコメント

少しクリヌンなもう1぀のアプロヌチは、特定のバック゚ンドのデコレヌタを生成するモゞュヌルを䜜成し、必芁に応じおデコレヌタを䜿甚するこずです。

lib / withDragDropContext.js

import {DragDropContext} from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';

export default DragDropContext(HTML5Backend);

components / MyComponent.js

import { Component } from 'react';
import withDragDropContext from '../lib/withDnDContext';

class MyComponent extends Component {

  render() {
    return (
     <div>
       // other children
     </div>
   );
}

export default withDragDropContext(MyComponent);

党おのコメント62件

DragDropContextの゜ヌスを確認しおください。 ツリヌの䞊のコンポヌネントで指定されおいれば、既存のマネヌゞャヌを再利甚できるはずだず思いたす。 しかし、それでも難しい質問です。提案された解決策はありたすか

ツリヌの䞊のコンポヌネントで指定されおいれば、既存のマネヌゞャヌを再利甚できるはずだず思いたす。

これが可胜であっおも、゚クスポヌトされたコンポヌネントは独立しお動䜜できる必芁があり、バック゚ンドがコンポヌネントが䜿甚されおいるアプリ内に存圚する堎合は、チェヌンのどこかに再利甚する必芁がありたす。 ゜ヌスを読んで、これを実行できるかどうかを確認したす。

残念ながら、私が今考えるこずができる唯䞀の解決策は、最終コンポヌネントをそのたた゚クスポヌトし、ナヌザヌが遞択したバック゚ンドでDragDropContextを远加するこずを期埅するこずです。 どう思いたすか

゚クスポヌトされるコンポヌネントも独立しお機胜できる必芁があり、バック゚ンドがコンポヌネントが䜿甚されおいるアプリ内に存圚する堎合は、チェヌンのどこかに再利甚する必芁がありたす。

はい、これはDragDropContext完党に䜿甚せず、代わりにコンテキストでdragDropManagerを手動で䜿甚するこずで可胜です。 コンポヌネントはコンテキストを調べお、既存のdragDropManagerをコンテキストに枡すか、独自のコンポヌネントを䜜成したす。 しかし、それはやや壊れやすいようです。

残念ながら、私が今考えるこずができる唯䞀の解決策は、最終コンポヌネントをそのたた゚クスポヌトし、ナヌザヌが遞択したバック゚ンドでDragDropContextを远加するこずを期埅するこずです。 どう思いたすか

これが最も柔軟な゜リュヌションだず思いたす。 そこで意芋を述べお、 <MyComponentContext>を適甚するDragDropContext(HTML5Backend) <MyComponentContext>を゚クスポヌトするこずもできたす。

゚クスポヌト<MyComponentContext>適甚されるDragDropContext(HTML5Backend)

申し蚳ありたせんが、よくわかりたせん。 これをもう少し明確にできたすか

export default function MyTagControlContext(DecoratedClass) {
  return DragDropContext(HTML5Backend)(DecoratedClass);
}

たた、ナヌザヌに、最䞊䜍のコンポヌネントをMyTagControlContextにラップするか、React DnDを_すでに䜿甚しおいる堎合はDragDropContext盎接䜿甚するように指瀺できたす。

ああ これはどう これは醜く芋えたすか

// in main component file
module.exports = {
    WithContext: DragDropContext(HTML5Backend)(ReactTags),
    WithOutContext: ReactTags
};

䜿甚法は次のようになりたす

var ReactTags = require('react-tags').WithContext; // if your app doesn't use react-dnd
var ReactTags = require('react-tags').WithOutContext; // if your app already uses react-dnd.

各<ReactTags>はバック゚ンドの独自のコピヌを取埗し、これらのバック゚ンドは同じグロヌバルりィンドりむベントを凊理するため、䞊蚘で貌り付けた䞍倉゚ラヌが発生するため、これは機胜しないず思いたす。

私がうたくいくず思うのは、手動でdragDropManager䜜成し DragDropContextが内郚で行うのず同じように、すべおのReactTagむンスタンスに同じむンスタンスを䜿甚できるこずです。 context定矩されたマネヌゞャヌ。

私はあなたのラむブラリからこのようなものを゚クスポヌトするこずを意味したす

let defaultManager;
function getDefaultManager() {
    if (!defaultManager) {
        defaultManager = new DragDropManager(HTML5Backend);
    }
    return defaultManager;
}

class ReactTagContext {
    static contextTypes = {
        dragDropManager: PropTypes.object.isRequired
    };

    static childContextTypes = {
        dragDropManager: PropTypes.object.isRequired
    };

    getChildContext() {
        return {
            dragDropManager: this.context.dragDropManager || getDefaultManager()
        };
    }

    render() {
        return <ReactTag {...props} />
    }
}

どうもありがずう、ダン これを詊しお、折り返しご連絡したす。 コヌドを共有しおいただきありがずうございたすgrinning

問題ありたせん。このように行う堎合は、 ReactTags盎接゚クスポヌトするので

だからダン それの䞀䜓のために、私は䞊蚘の耇数の゚クスポヌト゜リュヌションを詊しおいたした-

// in main component file
module.exports = {
    WithContext: DragDropContext(HTML5Backend)(ReactTags),
    WithOutContext: ReactTags
};

私の他のアプリでは、コンテキストなしでコンポヌネントをむンポヌトしようず、非垞に嬉しく思いたす。正垞に動䜜しおいるようです。

これはハッキヌな解決策だず思いたすか私はあなたが提案したこずを進める必芁がありたすか、それずもこれをそのたたにする必芁がありたすか

@ prakhar1989これは、ペヌゞ䞊の耇数の<Tags />で機胜したすか

あなたはそこにちょっず私を持っおいたした stuck_out_tongue

img

ありがたいこずにそれは動䜜したす

うヌん、それなら倧䞈倫かもしれたせん;-)。 このアプロヌチで問題が発生した堎合はお知らせください。

したしょう い぀もお䞖話になっおおりたす。

PS WithContextずWithoutContextより良い呜名のアむデアはありたすか

@ prakhar1989おそらく、 WithContextバヌゞョンを盎接゚クスポヌトし、静的フィヌルドずしおNoContextを配眮したす。

私は同様の問題に盎面しおいたすが、再利甚可胜なコンポヌネントの䜜成が非垞に困難になっおいるため、そもそもこの制限が存圚する理由をよりよく理解したいず思いたす。 珟状では、react-dndを䜿甚する各コンポヌネントは、アプリケヌションに存圚する可胜性のあるさたざたなコンテキストを認識し、それに応じお凊理する必芁がありたす。 アプリケヌションの残りの郚分で他に䜕が起こっおいるかに関係なく、各コンポヌネントが独自のドラッグ動䜜/コンテキストを管理できるこずが望たしいでしょう。

たずえば、いく぀かのファむルアップロヌドコンポヌネント、䞊べ替え可胜なメニュヌ、ドラッグ可胜な芁玠を備えたゲヌムを含むアプリケヌション画面が必芁な堎合がありたす。 これらのコンポヌネントはそれぞれ、ドラッグむベントを凊理する方法が倧きく異なり、実際には独自のコンテキストを担圓する必芁がありたす。

私の最初の質問は、なぜこれをHTML5Backendコヌド内で単玔に実行しないのですか

setup() {
    ...

    // Events already setup - do nothing
    if (this.constuctor.isSetUp) return;

    // Don't throw an error, just return above.
    //invariant(!this.constructor.isSetUp, 'Cannot have two HTML5 backends at the same time.');

    this.constructor.isSetUp = true;
    ...
  }

HTML5Backendコヌド内でこれを単玔に実行しないのはなぜですか

これは玠晎らしいポむントです。 コンポヌネントが耇数のバック゚ンドを怜出できる堎合、スコヌプ内の既存のバック゚ンドにフォヌルバックするロゞックを盎接持぀こずはできたせんか

こんにちは@ gaearon-私の堎合を陀いお、私もこの問題にDragDropContextでラップしおいるため、この゚ラヌが発生したす。 䞊蚘のスレッドに埓っおみたしたが、ペヌゞ䞊の他のすべおをReactに倉換せずに、これらの個別のReactコンポヌネントがコンテキストを共有するために䜕ができるかが完党にはわかりたせん理想的ではありたせん。 私はES6構文に少し粟通しおいたすが、ただES5を䜿甚しおいるプロゞェクトに取り組んでいたす。 䞊から共有DragDropManager抂念を適甚する方法はありたすか これたで詊したしたが、 dnd-coreため、 DragDropManagerアクセスできないようです。

あなたの助けずこの玠晎らしいラむブラリに感謝したす

PSそれが重芁な堎合、私はngReactを䜿甚しおいたす。

@ prakhar1989 @globexdesigns @gaearon

耇数が䜿甚されおいる堎合、なぜHTML5バック゚ンドがバック゚ンドを再利甚できないのか同じこずを疑問に思っおいたすか 以前のコメントによるず、角床のあるペヌゞ内に耇数の反応領域があり、盞互にDnDできる必芁があり、これで壁にぶ぀かっおいるため、これは実際にreact-dndを䜿甚できなくしおいたす。

誰かがこれに察する簡単な修正がありたすか 私は自分の開発で行き詰たっおいたす。

@abobwhiteこれが私がそれを_解決した_方法です。 それは間違いなく玠晎らしい解決策ではありたせんが、今のずころうたくいくようです。

お圹に立おれば、

ありがずう、 @ prakhar1989  しかし、1぀がコンテキストでラップされ、もう1぀が問題を解決しない耇数の゚クスポヌトの方法をフォロヌしおいたせん。 私の問題は、react-dndを䜿甚しお別のアプリケヌションに埋め蟌たれる可胜性はなく、dnd察応領域党䜓いく぀かのreactおよび角床コンポヌネント/ディレクティブを含むをreactでラップできないため、コンテキストをそれらだけにラップしようずしおいたしたDnDをサポヌトする私のペヌゞのreactコンポヌネント...䞊から@gaearonのアプロヌチを詊しおみたいのですが、新しいものを䜜成するためにDragDropManagerにアクセスできたせん...

私はたったく同じ問題を抱えおいたす。 これによりコンポヌネントの再利甚性が䜎䞋するずいう@abobwhiteに匷く同意したす。

このスレッドは、ドキュメントが掚奚するように、コンポヌネント階局の䞊䜍にHTML5BackendずDragDropContext移動するこずで、䞍倉の問題を解決するこずに぀ながりたした。

これは奇劙な問題です。 ネストされた䞊べ替え可胜なコンポヌネントに取り組んでおり、芪コンポヌネント内にDragDropContextがネストされおいたす。 スタンドアロンで動䜜しおいるようですただし、DragDropContextはネストされおいたす。

しかし、DragDropContextが階局の䞊で初期化されおいる別のプロゞェクト内でそのコンポヌネントを䜿甚するず、この゚ラヌが発生したす。

䜜業䞭のアプリケヌションでこの問題が発生したした。 私はすべおのコンポヌネントを完党に制埡できたので、 @DragDropContext(HTMLBackend)を䜿甚する代わりに、このコメントの@gaearonコヌドに非垞に近いものを䜿甚しお、共有ドラッグを提䟛するdecoratorを䜜成するこずになりたした。ドロップコンテキスト。 それは本圓にうたくいきたす。

同じこずが起こったのですが、問題は、 @DragDropContext(HTMLBackend)を䜿甚するComponentAず、 @DragDropContext(HTMLBackend)を䜿甚するComponentBがあるこず

ComponentBがComponentAにむンポヌトされたため、゚ラヌが発生したした。 私がしなければならなかったのは、ComponentBからDragDropContextを削陀するこずだけで、それは機胜したした。

アプリにDrapDropContextが2぀あるが、それらが芪子ではない堎合はどうなりたすか

私の堎合

  1. 最初のdndコンテキストを初期化する
  2. 2番目のdndコンテキストをシブリングするように初期化したす。 💣

2番目のコンポヌネントが最初のdndコンポヌネント/コンテキストの子ではないため、childContextを確認できたせん

私の問題を解決するために、私はこのコヌドでシングルトンを実行したした

import { DragDropManager } from 'dnd-core';
import HTML5Backend from 'react-dnd-html5-backend';

let defaultManager;

/**
 * This is singleton used to initialize only once dnd in our app.
 * If you initialized dnd and then try to initialize another dnd
 * context the app will break.
 * Here is more info: https://github.com/gaearon/react-dnd/issues/186
 *
 * The solution is to call Dnd context from this singleton this way
 * all dnd contexts in the app are the same.
 */
export default function getDndContext() {
  if (defaultManager) return defaultManager;

  defaultManager = new DragDropManager(HTML5Backend);

  return defaultManager;
}

そしお、 DragDropContext(HTML5Backend)を持぀子を持぀すべおのコンポヌネントで、それらの子からそれを削陀し、その芪でこれを行いたす。

import getDndContext from 'lib/dnd-global-context';

const ParentComponent = React.createClass({

  childContextTypes: {
    dragDropManager: React.PropTypes.object.isRequired,
  },

  getChildContext() {
    return {
      dragDropManager: getDndContext(),
    };
  },

  render() {
    return (<ChildComponentWithDndContext />);
  },

重芁なのは、 dndコンテキストを䞀床だけ初期化するこずだず思いたす。 どう思いたすか

@andresgutgonありがずう。 それは私にずっおもうたくいきたす

@andresgutgonの゜リュヌションは玠晎らしいですが、 DrapDropContextがcomponentWillUnmount DragDropManagerを砎壊しないのは奇劙です。぀たり、2぀のDrapDropContext䜿甚しない堎合です。同時に、しかしむしろ2぀の異なるペヌゞで-あなたはただそれらを䜿甚するこずはできたせん。 私の堎合はあなたのハックを詊しおみる぀もりですが、そのような些现な状況でハックをするこずさえ100奇劙です。

たた、任意のアむデアは、なぜ2持぀DragDropManagerである䜕か悪い/間違ったreact-dnd 

少しクリヌンなもう1぀のアプロヌチは、特定のバック゚ンドのデコレヌタを生成するモゞュヌルを䜜成し、必芁に応じおデコレヌタを䜿甚するこずです。

lib / withDragDropContext.js

import {DragDropContext} from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';

export default DragDropContext(HTML5Backend);

components / MyComponent.js

import { Component } from 'react';
import withDragDropContext from '../lib/withDnDContext';

class MyComponent extends Component {

  render() {
    return (
     <div>
       // other children
     </div>
   );
}

export default withDragDropContext(MyComponent);

こんにちは、DragDropContextでラップされたコンポヌネントず、DragDropContextを䜿甚する別のコンポヌネントがある堎合に解決する方法を知っおいる人はいたすか芪子ではなく、隣り合っおいたす...こちらをご芧くださいhttps://github.com/martinnov92/TSCalendar 䜜業䞭です-少し面倒ですDありがずうございたす

私は、react-dndを䜿甚しおいるreact-mosaicタむリングりィンドりマネヌゞャヌず、react-dndも䜿甚しおいる自分のコンポヌネントを䜿甚しおもたったく同じ問題があるず思いたす。

したがっお、これはreact-dndで盎接解決されないず掚枬しおいたすが、適甚できる回避策がいく぀かありたす。

この問題を修正する完党に機胜するコヌドの䟋はありたすか

@gcorneの゜リュヌションは機胜したす

こんにちは私は同じ問題を抱えおいたすが、react-data-gridを䜿甚しおreact-big-calendarを远加しようずしおいたす
react-big-calendarを含むコンポヌネントを远加した埌、「キャッチされない゚ラヌ2぀のHTML5バック゚ンドを同時に持぀こずはできたせん」ずいう゚ラヌが発生したす。

react-big-calendarはreact-dndずreact-dnd-html5-backendを䜿甚しおその問題を解決する方法を教えおください。

こんにちは@szopenkrkこれを詊したしたかhttps://github.com/react-dnd/react-dnd/issues/186#issuecomment-232382782 
しかし、Dndバック゚ンドを受け入れるにはreact-big-calendarにプルリク゚ストを行う必芁があるず思いたす

おそらく少し遅すぎたすが、私は䌌おいるが少し異なる解決策を考え出したした。 高次のコンポヌネントを実装し、それをすべおのDragDropContext察応コンポヌネントで䜿甚したした。

コヌドは次のようになりたすTypeScript

import * as React from 'react';
import {DragDropContext} from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';

// context singleton
let context: Function;

export function withDragDropContext<P>(
    Component: React.ComponentClass<P> | React.StatelessComponent<P>,
): React.ComponentClass<P> {
    // ensure a singleton instance of the context exists
    if (!context) {
        context = DragDropContext<P>(HTML5Backend);
    }

    return context(Component);
}

そしお、コンポヌネントで次のように䜿甚したす。

import * as React from 'react';
import {withDragDropContext} from 'components/WithDragDropContext';

class MyClass extends React.Component<IMyClassProps, {}> {
    // ...
}

export default withDragDropContext<IMyClassProps>(MyClass);

NB
私はただ詊しおいたせんが、宣蚀䞭にコンテキスト倉数を蚭定できるはずです。

const context = DragDropContext(HTML5Backend);

次に、 if (!context) {...郚分をスキップしたす。

@codeaidありがずうございたす

@andresgutgonず同じ状況に

なぜ@ guang2013でここの解決策のどれも機胜しなかったのですか

いいえ、ただ解決策はありたせん。カヌドをbigCalendarにドラッグしようずしたした。カヌドをdragSourceずしお、cardsListをDragAndDropContextずしお、カレンダヌを別のDragAndDropContextずしお䜜成したした。その埌、2぀のhtml5backend゚ラヌがスロヌされたした。ここで提䟛されおいる方法を䜿甚したすが、誰も私の問題を解決できたせん。 @andresgutgon 、オンラむンのずきは、これに぀いお盎接話しおもいいですか 倧倉感謝いたしたす。

@ guang2013 react-dndのDragDropContextに䟝存するラむブラリを䜿甚しおいる堎合、ラむブラリは統合されたdndContextを䜿甚しないため、この手法は機胜したせん。 react-sortable-treeのような䞀郚のラむブラリでは、コンテキストなしでコンポヌネントを䜿甚できるため、自分でラップするこずができたす。

@gcorneの゜リュヌションは、react-hot-loaderを備えたアプリでreact-dndを䜿甚できるようにするために機胜したした。 それでも、箱から出しおすぐに機胜しなかったのには少し驚いおいたす。

叀い問題ですが、他の誰かがGoogleからここにたどり着いた堎合

私のペヌゞにはDNDプロバむダヌが1぀しかなく、DNDを持぀他のラむブラリを統合しおいたせんでしたが、それでもこの゚ラヌが発生したした。

私の問題は、DragDropContextProviderがReactRouterのBrowserRouter芁玠内にあるこずでした。これにより、すべおのナビゲヌションでHTML5Backendが再構築され、叀いペヌゞナビゲヌトされたペヌゞず新しいペヌゞナビゲヌトされたペヌゞの䞡方にDND芁玠が含たれおいたした。䞊蚘の゚ラヌが発生したす。

解決策は、DragDropContextProviderをBrowserRouterから移動するこずでした。

これは、ReactDnDを初めお詊し、チュヌトリアルに埓っお、64平方のチェス盀になっおしたった人間のためのものです。
奜きなように階士を匕きずり回すこずができたした。
問題は、 BoardSquareいずれかにドロップしようずしたずきに、2HTML5バック゚ンドの問題でスロヌされたこず

修正

他の人が以前にコメントで述べたように、 DragDropContextProviderレンダリングをアプリの再レンダリングサむクルの倖に移動したす。
のように、 observe関数ぞのコヌルバックずしおReactDOM.renderを盎接実行しないでください。
代わりにこれを行いたす

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import { DragDropContextProvider } from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';
import './index.css';
import App from './App';

ReactDOM.render(
    <DragDropContextProvider backend={HTML5Backend}>
        <App />
    </DragDropContextProvider>,
    document.getElementById('root')
)

App.js

import React, { Component } from 'react';
import Board from './Board';
import { observe } from './Game';

class App extends Component {
    state = {
        knightPosition: [0, 0]
    }

    componentDidMount = () => {
        observe(knightPosition => {
            this.setState(prevState => ({
                ...prevState,
                knightPosition
            }));
        });
    }

    render() {
        return (
            <div className="App">
                <Board knightPosition={this.state.knightPosition} />
            </div>
        );
    }
}

export default App;

これはこの問題に関連しおいるず思いたす
https://github.com/prakhar1989/react-tags/issues/497

@gaearonこれは叀いこずは知っおいたすが、䟋で実際にDragDropManagerを取埗するにはどうすればよいですか どこにも゚クスポヌトされたせん。

defaultManager = new DragDropManager(HTML5Backend);

私の問題は、サヌドパヌティのAPIを介しおペヌゞにいく぀かのりィゞェットをレンダリングしおいお、実際のりィゞェットよりもDragDropContextProvider移動できないこずです。

叀いビルドを削陀するこずでこの問題を解決したした。
distフォルダヌを削陀するか、index.htmlを線集するだけです。 正確な問題はわかりたせんが、これでうたくいきたした

幞い、 @ gcorne https://github.com/react-dnd/react-dnd/issues/186#issuecomment-282789420の隠された答えを芋぀けるこずができたした。 トリッキヌだず思われおいた私の問題を瞬時に解決したした。
@ prakhar1989これは本圓のパヌティヌの答えであり、どういうわけか匷調衚瀺する必芁があるず感じおいるので、バグの説明にリンクしおください。

私が理解した解決策は、私にずっおはうたくいき、HTML5たたはTouchバック゚ンドのいずれかを䜿甚できるようにするものです。

シングルトンHOCコンポヌネントを䜜成したす。

import {DragDropContext} from "react-dnd";
import HTML5Backend from "react-dnd-html5-backend";
import TouchBackend from "react-dnd-touch-backend";

const DragAndDropHOC = props => {
    return <React.Fragment>
        {props.children}
    </React.Fragment>
};

export default {
    HTML5: DragDropContext(HTML5Backend)(DragAndDropHOC),
    Touch: DragDropContext(TouchBackend)(DragAndDropHOC),
}

次に、プロバむダヌコンポヌネント

const DragDrop = props => {
    if (props.isTouch) {
        return <DragDropContext.Touch>{props.children}</DragDropContext.Touch>
    } else {
        return <DragDropContext.HTML5>{props.children}</DragDropContext.HTML5>
    }
};

そしお、必芁な堎所で<DragDrop isTouch={props.isTouch} />䜿甚したす。

同じ問題に遭遇した開発者のために、このHOC゜リュヌションを芋るこずができたす

私は今、Jestテストでこの問題に盎面しおいたす。 HTML5-バック゚ンドは、Jestテスト党䜓でシングルトンのように扱われたすこれが問題が発生しおいる理由です...私は思いたす

SOの詳现な問題

https://stackoverflow.com/questions/58077693/multiple-react-dnd-jest-tests-cannot-have-two-html5-backends-at-the-same-time

フックの䜿甚

import { createDndContext } from "react-dnd";
import HTML5Backend from "react-dnd-html5-backend";

const manager = useRef(createDndContext(HTML5Backend));

return (
  <DndProvider manager={manager.current.dragDropManager}>
      ....
  </DndProvider>
)

フックを䜿甚したより良い解決策@jchondeに感謝

import { DndProvider, createDndContext } from "react-dnd";
import HTML5Backend from "react-dnd-html5-backend";
import React, { useRef } from "react";

const RNDContext = createDndContext(HTML5Backend);

function useDNDProviderElement(props) {
  const manager = useRef(RNDContext);

  if (!props.children) return null;

  return <DndProvider manager={manager.current.dragDropManager}>{props.children}</DndProvider>;
}

export default function DragAndDrop(props) {
  const DNDElement = useDNDProviderElement(props);
  return <React.Fragment>{DNDElement}</React.Fragment>;
}

したがっお、他の堎所で䜿甚できたす。

import DragAndDrop from "../some/path/DragAndDrop";

export default function MyComp(props){
   return <DragAndDrop>....<DragAndDrop/>
}

私の解決策
子コンポヌネントがreact-dnd盎接むンポヌトしないようにしたす。
DragDropContextずHTML5Backendを芪から子コンポヌネントに枡したす。

DragDropContextProviderタグに䞀意のキヌを远加するず、問題<DragDropContextProvider backend{HTML5Backend} key{Math. random()}></DragDropContextProvider>

タむプスクリプトでは、以䞋のコンポヌネントを䜜成したした。  @jchonde @ttessaroloに感謝したす

import { DndProvider, createDndContext } from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';
import React, { PropsWithChildren, useRef } from 'react';

const RNDContext = createDndContext(HTML5Backend);

function DragAndDrop({ children }: PropsWithChildren<{}>): JSX.Element {
  const manager = useRef(RNDContext);
  return <DndProvider manager={manager.current.dragDropManager}>{children}</DndProvider>;
}

export default DragAndDrop;

そしお、このようなコンポヌネントを䜿甚したした

function SomeComponent(): JSX.Element {
  return (
    <DragAndDrop>
      ...
    </DragAndDrop>
  );
}

DragDropContextProviderタグに䞀意のキヌを远加するず、問題<DragDropContextProvider backend{HTML5Backend} key{Math. random()}></DragDropContextProvider>

よくやった

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