рд╣рд╛рдп рджрд╛рди,
рдмрд╕ рдПрдХ рддреНрд╡рд░рд┐рдд - рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ react-dnd
рдПрдХ рдЕрдиреНрдп рдРрдк рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ рдЬреЛ _itself рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ_ react-dnd
рдЗрд╕рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рддреНрд░реБрдЯрд┐ рдКрдкрд░ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдЪреВрдВрдХрд┐ рдЕрдиреНрдп рдШрдЯрдХ рдореЗрд░рд╛ рдЕрдкрдирд╛ рд╣реИ, рдореИрдВ рдШрдЯрдХ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп DragDropContext
рдХреЙрд▓ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдШрдЯрдХ рдХреА рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛ рддреНрдпрд╛рдЧ рджреЗрддрд╛ рд╣реИред рдЖрдк рдХреНрдпрд╛ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ?
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:
рд╢реБрдХреНрд░ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рд╣рдореНрдо, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рдареАрдХ рд╣реИ; ;-) рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ!
рдХрд░реВрдБрдЧрд╛! рдЖрдкрдХреА рд╕рд╛рд░реА рдорджрдж рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдПрдХ рдЯрди рдзрдиреНрдпрд╡рд╛рджред
рдкреБрдирд╢реНрдЪ: рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ 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
рд▓реЗрдХрд┐рди рд╡реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдирд╣реАрдВ рд╣реИрдВ?
рдореЗрд░рд╛ рдорд╛рдорд▓рд╛:
рдореИрдВ рдЪрд╛рдЗрд▓реНрдбрдХрдиреЗрдХреНрдЯ рдкрд░ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рджреВрд╕рд░рд╛ рдШрдЯрдХ рдкрд╣рд▓реЗ 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
?
рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреЛ рдереЛрдбрд╝рд╛ рдХреНрд▓реАрдирд░ рд╣реИ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ:
import {DragDropContext} from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';
export default DragDropContext(HTML5Backend);
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 рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рд╕рдорд╕реНрдпрд╛:
рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
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>
рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреЛ рдереЛрдбрд╝рд╛ рдХреНрд▓реАрдирд░ рд╣реИ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ:
lib / withDragDropContext.js
рдШрдЯрдХреЛрдВ / MyComponent.js