рдореИрдВ рдбреНрд░реИрдЧ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдШрдЯрдХ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╕реЗ <ListGroupItem>
) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЬрдм рдореИрдВ рдЙрд╕ рдкрд░ connectReactSource
рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ
рдХреЗрд╡рд▓ рдореВрд▓ рддрддреНрд╡ рдиреЛрдбреНрд╕ рдХреЛ рдЕрдм рдХрдиреЗрдХреНрдЯрдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ () рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдпрд╛ рддреЛ ListGroupItem рдХреЛ a . рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ
, рдпрд╛ рдЗрд╕реЗ рдбреНрд░реИрдЧ рд╕реЛрд░реНрд╕ рдпрд╛ рдбреНрд░реЙрдк рдЯрд╛рд░рдЧреЗрдЯ рдореЗрдВ рд╣реА рдмрджрд▓ рджреЗрдВредрд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ
<div>
рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдореЗрд░реЗ рдорд╛рд░реНрдХрдЕрдк рдФрд░ рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ<li>
рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЗрд╕реЗ рдбреНрд░реИрдЧ рд╕реЛрд░реНрд╕ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХ рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╕рд╣реА рд╣реИ?
рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╢реНрдиред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
import { findDOMNode } from 'react-dom';
class DraggableListGroupItem extends Component {
render() {
const { connectDragSource, ...rest } = this.props;
return (
<ListGroupItem
{...rest}
ref={instance => connectDragSource(findDOMNode(instance))}
/>
);
}
}
export default DragSource(...)(DraggableListGroupItem);
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ connect*()
рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреНрдпрд╛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдпрд╛ рддреЛ рдШреЛрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдПрдХ рдбреЛрдо рд░рд┐рдПрдХреНрдЯ рддрддреНрд╡ рдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдмрджрд▓реЗ рдореЗрдВ рдПрдХ рдбреЛрдо рд░рд┐рдПрдХреНрдЯ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ) рдпрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ (рдЙрдиреНрд╣реЗрдВ рдбреЛрдо рдиреЛрдб рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ null
рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ-рдЬреИрд╕реЗ рд░реЗрдлрд░реА рдХрд╛рдо )
(рдпрд╣ рдЖрдкрдХреЛ рдбреНрд░реИрдЧ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп DOM рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рднреА рджреЗрддрд╛ рд╣реИтАФрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк findDOMNode()
рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдиреЛрдб рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЖрдВрддрд░рд┐рдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдмреБрд░рд╛ рд╣реИ рдХрд┐рд╕реА рддреГрддреАрдп-рдкрдХреНрд╖ рдШрдЯрдХ рдХреА DOM рд╕рдВрд░рдЪрдирд╛ред)
рдпрд╣ рдореЗрд░реЗ рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдЕрдм рд╕рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рддрддреНрд╡ рдЦреАрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
Unhandled promise rejection TypeError: (0 , _reactDom2.default) is not a function(тАж)
рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛
import findDOMNode from 'react-dom';
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп
import { findDOMNode } from 'react-dom';
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ react-dom
рдХрд╛ рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд┐рд╕реЗ findDOMNode
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд░ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкрд░ рдЕрдзрд┐рдХ: http://exploringjs.com/es6/ch_modules.html
рдореИрдВ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмреАрдЪ рдореЗрдВ рдерд╛ рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдмрдЧ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛!
рдореБрдЭреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд░ рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореБрдЭреЗ рдХрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдбреАрдмрдЧ рдЯреВрд▓ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдиреЗ рдореЗрдВ рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЕрдм рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдХреИрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕реЗ рд╡реЗрдмрдкреИрдХ рджреНрд╡рд╛рд░рд╛ рдЙрд▓рдЭрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рд╕рдмрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдкреБрдирд╢реНрдЪ: рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рджрд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реЛрдЧрд╛), рддреЛ рдореИрдВ рдЗрд╕реЗ рдХрд╣рд╛рдВ рд░рдЦреВрдВрдЧрд╛? рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ рдЕрдЧрд░ ConnectDragSource рддреНрд░реБрдЯрд┐ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИред
рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдВрджреЗрд╢ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреБрдЧрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ :-)
рд╡реИрд╕реЗ рдореИрдВ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдмрд┐рдВрджреБ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ <div>
рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ред рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ connectDragSource()
рдХреЛ рдХрд┐рд╕реА рднреА DOM рддрддреНрд╡ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ- <div>
, <li>
, рдпрд╛ рдХреБрдЫ рдФрд░ред рдХрд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреБрдЧрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ :-)
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ! рдореБрд╕реНрдХрд░рд╛рд╣рдЯ:
рдпрджрд┐ рдЖрдк connect*()
рдХреЙрд▓ рдХреЛ рдЕрдкрдиреЗ render()
s рдореЗрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдереЛрдбрд╝реА рд╕рдЯреАрдХрддрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣реА рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:
ref={instance => {
const node = findDOMNode(instance);
connectDragSource(node);
connectDropTarget(node);
}}
рдЗрд╕ рдкрд░ 2 рдкреНрд░рд╢реНрди:
Q1. рдХреНрдпрд╛ рдЖрдк рддреАрд╕рд░реЗ рднрд╛рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдбреНрд░реИрдЧ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдПрдХреНрдЯрд╕реНрдЯреНрд░реИрдк "рдХрдВрдЯреЗрдирд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рдкрдВрдХреНрддрд┐" рдпрд╛ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдХреЗ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдкреНрд░рд╢реНрди реи. рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ findDOMNode рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рддреГрддреАрдп рдкрдХреНрд╖ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдбреНрд░реИрдЧ/рдбреНрд░реЙрдк рдХреИрд╕реЗ рдХрд░реЗрдВ рдпрджрд┐ рд╡реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИрдВ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ! рдореБрд╕реНрдХрд░рд╛рд╣рдЯ:
рдпрджрд┐ рдЖрдк
connect*()
рдХреЙрд▓ рдХреЛ рдЕрдкрдиреЗrender()
s рдореЗрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛рдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдереЛрдбрд╝реА рд╕рдЯреАрдХрддрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣реА рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд: