React-dnd: рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛ HTML5 рдмреИрдХрдПрдВрдб рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЬреВрди 2015  ┬╖  62рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: react-dnd/react-dnd

рд╣рд╛рдп рджрд╛рди,

рдмрд╕ рдПрдХ рддреНрд╡рд░рд┐рдд - рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ react-dnd рдПрдХ рдЕрдиреНрдп рдРрдк рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ рдЬреЛ _itself рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ_ react-dnd рдЗрд╕рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рддреНрд░реБрдЯрд┐ рдКрдкрд░ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдЪреВрдВрдХрд┐ рдЕрдиреНрдп рдШрдЯрдХ рдореЗрд░рд╛ рдЕрдкрдирд╛ рд╣реИ, рдореИрдВ рдШрдЯрдХ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп DragDropContext рдХреЙрд▓ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдШрдЯрдХ рдХреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛ рддреНрдпрд╛рдЧ рджреЗрддрд╛ рд╣реИред рдЖрдк рдХреНрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреЛ рдереЛрдбрд╝рд╛ рдХреНрд▓реАрдирд░ рд╣реИ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ:

lib / withDragDropContext.js

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

export default DragDropContext(HTML5Backend);

рдШрдЯрдХреЛрдВ / 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 рд╕рдВрджрд░реНрдн рдХреЗ рдиреАрдЪреЗ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдпрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреБрдЫ рдирд╛рдЬреБрдХ рд▓рдЧрддрд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдореИрдВ рдЕрднреА рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡рд╣ рдЕрдВрддрд┐рдо рдШрдЯрдХ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рдЪрдпрди рдХреЗ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рдбреНрд░реИрдЧрдбреНрд░реЙрдкрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рд▓рдЪреАрд▓рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рднреА рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ <MyComponentContext> рдирд┐рд░реНрдпрд╛рдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ DragDropContext(HTML5Backend) рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

рдирд┐рд░реНрдпрд╛рдд <MyComponentContext> рдЬреЛ DragDropContext(HTML5Backend) рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рдореБрдЭреЗ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ред рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

рдФрд░ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╛ рддреЛ рдЕрдкрдиреЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдШрдЯрдХ рдХреЛ MyTagControlContext рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ рдпрд╛ DragDropContext рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрджрд┐ рд╡реЗ _already_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ React DnD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЖрд╣! рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рджрд┐рдЦрддрд╛ рд╣реИ?

// 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} />
    }
}

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, Dan! рдореИрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдКрдВрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ред рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж: рдореБрд╕реНрдХрд░рд╛рд╣рдЯ:

рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ .. рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реАрдзреЗ ReactTags рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рд░реИрдкрд░ рдпрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рдмрд┐рдирд╛ "рдЬреИрд╕рд╛ рд╣реИ" рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреЛ рджрд╛рди! рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВ рдКрдкрд░ рдХреЗ рдХрдИ рдирд┐рд░реНрдпрд╛рдд рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ -

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

рдЕрдкрдиреЗ рдЕрдиреНрдп рдРрдк рдореЗрдВ, рдореИрдВрдиреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд┐рдирд╛ рдШрдЯрдХ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореЗрд░реА рдЦреБрд╢реА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!

рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдШрд┐рдиреМрдирд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдФрд░ рдореБрдЭреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдореБрдЭреЗ рдпрд╣ рдХрд░рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

@ prakhar1989 рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдкреЗрдЬ рдкрд░ рдХрдИ <Tags /> рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рддреБрдо рдореБрдЭреЗ рд╡рд╣рд╛рдБ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдерд╛! : Stuck_out_tongue:

img

рд╢реБрдХреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рд╣рдореНрдо, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рдареАрдХ рд╣реИ; ;-) рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ!

рдХрд░реВрдБрдЧрд╛! рдЖрдкрдХреА рд╕рд╛рд░реА рдорджрдж рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдПрдХ рдЯрди рдзрдиреНрдпрд╡рд╛рджред

рдкреБрдирд╢реНрдЪ: рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ WithContext рдФрд░ WithoutContext рд▓рд┐рдП рдмреЗрд╣рддрд░ рдирд╛рдордХрд░рдг рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ?

@ prakhar1989 рдореИрдВ рд╢рд╛рдпрдж WithContext рд╕рдВрд╕реНрдХрд░рдг рд╕реАрдзреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░реВрдБрдЧрд╛, рдФрд░ рдЗрд╕ рдкрд░ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ NoContext рдбрд╛рд▓реВрдБрдЧрд╛ ред

рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕реАрдорд╛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдХреНрдпреЛрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-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 рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ

рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рд╣реИред рдпрджрд┐ рдШрдЯрдХ рдХрдИ рдмреИрдХрдПрдВрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рд╕реАрдзреЗ рдореМрдЬреВрджрд╛ рдмреИрдХреЗрдВрдб рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдЧрд┐рд░рдиреЗ рдХрд╛ рддрд░реНрдХ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ?

Hi @gaearon - рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреГрд╖реНрда рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рде (рдХреЛрдгреАрдп) рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд╛рд░рдг рдХреЛрдгреАрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рднреАрддрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреГрд╖реНрда рд╣реИ рдЬреЛ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡реГрдХреНрд╖ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреНрд░рд╢реНрди, рд╡рд┐рдХрд▓реНрдк рдФрд░ рдЕрдзрд┐рдХ рдмрдирд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреВрд▓рдмрд╛рд░ рдФрд░ рдПрдХ рдкреНрд░рд╢реНрди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдкреНрд░рд╢реНрди рд╡реГрдХреНрд╖ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП DnD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЕрдм рдХрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реЗрдЯрдЕрдк рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рдХреЛрдгреАрдп рд╕рдВрджрд░реНрдн рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ DragDropContext рд╕рд╛рде рд▓рдкреЗрдЯ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдзрд╛рдЧреЗ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреЗрдЬ рдкрд░ рд╕рдм рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рдЖрджрд░реНрд╢ рдирд╣реАрдВ) рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ ES6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдереЛрдбрд╝рд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЕрднреА рднреА ES5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рдКрдкрд░ рд╕реЗ рд╕рд╛рдЭрд╛ DragDropManager рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдм рддрдХ рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ DragDropManager рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ dnd-core

рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕ рднрдпрд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдкреБрдирд╢реНрдЪ рдЕрдЧрд░ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдореИрдВ ngReact рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

@ prakhar1989 @globexdesigns @gaearon

рдореИрдВ рдПрдХ рд╣реА рдмрд╛рдд рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ HTML5 рдмреИрдХрдПрдВрдб рд╕рд┐рд░реНрдл рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдПрдХрд╛рдзрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдпреЛрдЧреНтАНрдп рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЛрдгреАрдп рдкреГрд╖реНрда рдХреЗ рднреАрддрд░ рдХрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ DnD рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рджреАрд╡рд╛рд░ рдХреЛ рдорд╛рд░ рд░рд╣реЗ рд╣реИрдВред

рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд▓реНрджреА рддрдп рд╣реИ? рдореИрдВ рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдореГрдд рдкрдбрд╝рд╛рд╡ рдкрд░ рд╣реВрдВред

@abobwhite рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ _solved_ it рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдорд╣рд╛рди рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдЙрдореНрдореАрдж рд╣реИ рдХреА рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛,

рдзрдиреНрдпрд╡рд╛рдж, @ prakhar1989 ! рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд▓рд┐рдкрдЯреЗ рд╣реБрдП рдПрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рд░реНрдпрд╛рдд рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХреИрд╕реЗ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-dnd рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдПрдореНрдмреЗрдб рдирд╣реАрдВ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдмрд▓реНрдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореЗрд░реЗ рдкреВрд░реЗ dnd- рд╕рдХреНрд╖рдо рдХреНрд╖реЗрддреНрд░ (рдХрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдХреЛрдгреАрдп рдШрдЯрдХреЛрдВ / рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде) рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд┐рд░реНрдл рдЙрди рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рдВрджрд░реНрдн рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдореЗрд░реЗ рдкреГрд╖реНрда рдХреЗ рдЙрди рдШрдЯрдХреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдВ рдЬреЛ рдбреАрдПрдирдбреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ ... рдореБрдЭреЗ рдКрдкрд░ рд╕реЗ DragDropManager рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ рддрд╛рдХрд┐ рдирдпрд╛ рд╣реЛ рд╕рдХреЗ ...

рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ @abobwhite рд╕реЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд╣рдордд

рдЗрд╕ рдзрд╛рдЧреЗ рдиреЗ рдореБрдЭреЗ рдбреЙрдХреНрд╕ рдХреА рддрд░рд╣ рдЕрдкрдиреЗ рдШрдЯрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ HTML5Backend рдФрд░ DragDropContext рдореВрд╡ рдХрд░рдХреЗ рдореЗрд░реА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред

рдпрд╣ рдПрдХ рдЕрдЬреАрдм рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб reorderable рдШрдЯрдХ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдореВрд▓ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдЕрдВрджрд░ DragDropContext рдиреЗрд╕реНрдЯреЗрдб рд╣реИред рдпрд╣ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рдбреНрд░реИрдЧрдбреНрд░реЙрдкрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдиреЗрд╕реНрдЯреЗрдб рд╣реИ)ред

рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдЙрд╕ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдКрдкрд░ DragDropContext рдЖрд░рдВрднреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рднрд╛рдЧ рдЧрдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рд╕рднреА рдШрдЯрдХреЛрдВ рдкрд░ рдкреВрд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рдерд╛ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ @DragDropContext(HTMLBackend) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ decorator рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ @gaearon рдХреЛрдб рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬреЛ рдХрд┐ рдПрдХ рд╕рд╛рдЭрд╛ рдбреНрд░реИрдЧ рджреЗрдЧрд╛ рдбреНрд░реЙрдк рд╕рдВрджрд░реНрднред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╕ рдпрд╣реА рдмрд╛рдд рдереА рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ рдерд╛ рдЬрд┐рд╕рдореЗрдВ @DragDropContext(HTMLBackend) рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрддрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ ComponentB рдореЗрдВ @DragDropContext(HTMLBackend) рднреА рд╣реЛрддрд╛ рдерд╛ред

ComponentB рдХреЛ ComponentA рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдерд╛ рдХрд┐ ComponentB рд╕реЗ DragDropContext рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рдЬрд╛рдПред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдРрдк рдореЗрдВ 2 DrapDropContext рд▓реЗрдХрд┐рди рд╡реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдирд╣реАрдВ рд╣реИрдВ?

рдореЗрд░рд╛ рдорд╛рдорд▓рд╛:

  1. рдкрд╣рд▓реЗ dnd Context рдХреЛ Intialize рдХрд░реЗрдВ
  2. рдПрдХ рджреВрд╕рд░реЗ рдбрдВрдбреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред ЁЯТг

рдореИрдВ рдЪрд╛рдЗрд▓реНрдбрдХрдиреЗрдХреНрдЯ рдкрд░ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рджреВрд╕рд░рд╛ рдШрдЯрдХ рдкрд╣рд▓реЗ dnd рдШрдЯрдХ / рд╕рдВрджрд░реНрдн рдХрд╛ рдмрдЪреНрдЪрд╛ рдирд╣реАрдВ рд╣реИ

рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХрд┐рдпрд╛:

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 DragDropManager componentWillUnmount рдкрд░ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрджрд┐ рдЖрдк 2 DrapDropContext s рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдмрд▓реНрдХрд┐ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрдареЛрдВ рдкрд░ - рдЖрдк рдЕрднреА рднреА рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдореИрдВ рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЗ рд╣реИрдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреА рддреБрдЪреНрдЫ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА 100% рдЕрдЬреАрдм рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ 2 рд╣реЛрдиреЗ DragDropManager рд╣реИ рдХреБрдЫ рдмреБрд░рд╛ / рдореЗрдВ рдЧрд▓рдд react-dnd ?

рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреЛ рдереЛрдбрд╝рд╛ рдХреНрд▓реАрдирд░ рд╣реИ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ:

lib / withDragDropContext.js

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

export default DragDropContext(HTML5Backend);

рдШрдЯрдХреЛрдВ / 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);

рдирдорд╕реНрдХрд╛рд░, рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдПрдХ рдШрдЯрдХ рдХреЛ рдбреНрд░реИрдЧрдбреНрд░реЙрдкрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рддреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдПрдХ рдЕрдиреНрдп рдШрдЯрдХ рдЬреЛ рдбреНрд░реИрдЧрдбреНрд░реЙрдкрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдШрдЯрдХ (рдмрдбрд╝реЗ рдХреИрд▓реЗрдВрдбрд░ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ) рдПрдХ рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ, рдирд╣реАрдВ рдЕрднрд┐рднрд╛рд╡рдХ-рдмрдЪреНрдЪреЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╣реИрдВ ... рдЖрдк рдПрдХ рдмрд╛рд░ рджреЗрдЦ рдпрд╣рд╛рдБ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ https://github.com/martinnov92/TSCalendar (рдпрд╣ рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ - рддреЛ рдпрд╣ рдЫреЛрдЯрд╛ рд╕рд╛ рдЧрдиреНрджрд╛ рд╣реИ: рдбреА) рдзрдиреНрдпрд╡рд╛рдж

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореЛрдЬрд╝реЗрдХ рдЯрд╛рдЗрд▓рд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╣реА рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдФрд░ рдореЗрд░реЗ рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рддреЛ рдореИрдВ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕реАрдзреЗ рд░рд┐рдПрдХреНрд╢рди-рдбреИрдВрдб рдореЗрдВ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ?

@gcorne рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдирдорд╕реНрддреЗ, рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЗрдЯрд╛-рдЧреНрд░рд┐рдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмрдбрд╝рд╛-рдХреИрд▓реЗрдВрдбрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ
рдШрдЯрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмрдбрд╝рд╛-рдХреИрд▓реЗрдВрдбрд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреНрд░реБрдЯрд┐ рд╣реИ "рдЕрдирдХрд╡рд░реНрдб рдПрд░рд░: рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдмреИрдХреЗрдВрдб рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред"

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмрдбрд╝рд╛-рдХреИрд▓реЗрдВрдбрд░ рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмрд┐рдВрджреБ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-dnd-html5-backend рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ?

рд╣рд╛рдп @szopenkrk рдХреНрдпрд╛ рдЖрдкрдиреЗ рдпрд╣ https://github.com/react-dnd/react-dnd/issues/186#issuecomment -232382782 рдХреА рдХреЛрд╢рд┐рд╢ рдХреА?
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ Dnd рдмреИрдХрдПрдВрдб рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдмрдбрд╝реЗ-рдХреИрд▓реЗрдВрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

рд╢рд╛рдпрдж рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЧрдИ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╕рдорд╛рди рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдПрдХ рдЙрдЪреНрдЪрддрд░ рдСрд░реНрдбрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ рдмрд╕ рдЗрд╕реЗ рдореЗрд░реЗ рд╕рднреА рдбреНрд░реИрдЧрдбреНрд░реЙрдкрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдЕрд╡рдЧрдд рдШрдЯрдХреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ):

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);

рдирд╛рдпрдм
рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдШреЛрд╖рдгрд╛ рдХреЗ рджреМрд░рд╛рди рд╕рдВрджрд░реНрдн рдЪрд░ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

const context = DragDropContext(HTML5Backend);

рдФрд░ рдлрд┐рд░ if (!context) {... рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред

@codeaid рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ @andresgutgon рдЬреИрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рд╕реЗ

рдпрд╣рд╛рдБ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди @ guang2013 рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛?

рдирд╣реАрдВ, рдЕрднреА рднреА рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдореИрдВрдиреЗ рдХрд╛рд░реНрдб рдХреЛ рдмрдбрд╝реЗ рдХреИрд▓реЗрдиреНрдбрд░ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдореИрдВрдиреЗ рдХрд╛рд░реНрдб рдХреЛ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдФрд░ рдХрд╛рд░реНрдбрд▓рд┐рд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбреНрд░реИрдЧрдПрдиреНрдбрдбреНрд░реЙрдк рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛, рдХреИрд▓реЗрдВрдбрд░ рдХреЛ рдПрдХ рдЕрдиреНрдп рдбреНрд░реИрдЧрдПрдВрдбрдбреНрд░реИрдХ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд┐рд░ рджреЛ html5backend рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдпрд╛, рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдпрд╣рд╛рдБ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред @andresgutgon , рдЬрдм рдЖрдк рдСрдирд▓рд╛рдЗрди рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЖрдкрд╕реЗ рдЗрд╕ рдкрд░ рд╕реАрдзреЗ рдмрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреАред

@ guang2013 рдпрджрд┐ рдЖрдк рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-

@gcorne рдХреЗ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╣реЙрдЯ-рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рдРрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-dnd рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдлрд┐рд░ рднреА, рдореИрдВ рдереЛрдбрд╝рд╛ рд╣реИрд░рд╛рди рд╣реВрдБ рдХрд┐ рдпрд╣ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ!

рдкреБрд░рд╛рдирд╛ рдореБрджреНрджрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ Google рд╕реЗ рдпрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:

рдореЗрд░реЗ рдкреЗрдЬ рдкрд░ рдХреЗрд╡рд▓ 1 DND рдкреНрд░рджрд╛рддрд╛ рдерд╛, рдореИрдВ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдХреАрдХреГрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ DND рд╣реЛ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рднреА рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, рдХреБрдЫ рд╣рдж рддрдХ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗред

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ DragDropContextProvider ReactRouter рдХреЗ BrowserRouter рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдерд╛, рдЬрд┐рд╕рдиреЗ HTML5Backend рдХреЛ рд╣рд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкрд░ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдерд╛, рдФрд░ рдпрджрд┐ рджреЛрдиреЛрдВ рдкреБрд░рд╛рдиреЗ рдкреГрд╖реНрда (рдЬреЛ рджреВрд░ рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд┐рдП рдЧрдП рдереЗ) рдФрд░ рдирдП (рдПрдХ рдХреЗ рд▓рд┐рдП рдиреЗрд╡рд┐рдЧреЗрдЯ) рдореЗрдВ DND рддрддреНрд╡ рдереЗред рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдерд╛ BrowserRouter рд╕реЗ DragDropContextProvider рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред

рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ ReactDnD рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдФрд░ 64 рд╡рд░реНрдЧ рдХреА рдЕрд▓рдорд╛рд░реА рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖред
рдореИрдВ рдЕрдкрдиреА рдирд╛рдЗрдЯреА рдХреЛ рдЗрдзрд░-рдЙрдзрд░ рдЦреАрдВрдЪ рд╕рдХрддрд╛ рдерд╛ред
рд╕рдорд╕реНрдпрд╛ рддрдм рдереА рдЬрдм рдореИрдВрдиреЗ BoardSquare рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ 2 рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдмреИрдХрдПрдВрдб рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рдлреЗрдВрдХ рджрд┐рдпрд╛ред

рдЬреЛрдбрд╝

рдЬреИрд╕рд╛ рдХрд┐ рджреВрд╕рд░реЛрдВ рдиреЗ рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдРрдк рд░реЗрдВрдбрд░рд░ рдЪрдХреНрд░ рдХреЗ рдмрд╛рд╣рд░ DragDropContextProvider рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реАрдзреЗ рдирд╣реАрдВ рдХрд░рддреЗ рдПрдХ ReactDOM.render рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ observe рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдХрд░реЗрдВ:

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);

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдХрд┐рд╕реА рдкреЗрдЬ рдкрд░ рдХреБрдЫ 3 рдкрд╛рд░реНрдЯреА рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рд╡рд┐рдЬреЗрдЯреНрд╕ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЬреЗрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ DragDropContextProvider рдЕрдзрд┐рдХ рдирд╣реАрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ред

рдкреБрд░рд╛рдиреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╣рдЯрд╛рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред
рдмрд╕ рдбрд┐рд╕реНрдЯрд░реНрдм рдлреЛрд▓реНрдбрд░ рдХреЛ рдбрд┐рд▓реАрдЯ рдХрд░реЗрдВ рдпрд╛ index.html рдХреЛ рдПрдбрд┐рдЯ рдХрд░реЗрдВред рдореИрдВ рд╕рдЯреАрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ @gcorne (https://github.com/react-dnd/react-dnd/issues/186#issuecomment-282789420) рдХрд╛ (рдЫрд┐рдкрд╛ рд╣реБрдЖ) рдЙрддреНрддрд░ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ - рдЬрд┐рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдорд╛рдирд╛ рдЧрдпрд╛ - рддреБрд░рдВрддред
@ prakhar1989 рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд╕рд▓реА рдкрд╛рд░реНрдЯреА рдХрд╛ рдЬрд╡рд╛рдм рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдЧ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рд╕рдорд╛рдзрд╛рди рдЬреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ HTML5 рдпрд╛ рдЯрдЪ рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди 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 рд╕рдорд╛рдзрд╛рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ

рдореИрдВ рдЕрдм рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВред HTML5-Backend рдХреЛ рдЬреЗрд╕реНрдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреА рддрд░рд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)

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 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

vickyvxr picture vickyvxr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gaearon picture gaearon  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TheBolliwood picture TheBolliwood  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

croraf picture croraf  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BrennanRoberts picture BrennanRoberts  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ