React-dnd: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреНрд░реИрдЧ рдХрд┐рдП рдЧрдП рддрддреНрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд╛ рдЖрдХрд╛рд░ рдХреИрд╕реЗ рдмрджрд▓реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдЕрдкреНрд░реИрд▓ 2016  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: react-dnd/react-dnd

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЦреАрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рдкрд╛рда рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдкрд╛рда рдХреЛ рдЙрд╕рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рд▓рдЧрднрдЧ 20% рдХреЗ рдмрд░рд╛рдмрд░ рдЪреМрдбрд╝рд╛рдИ/рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреИрд╕реЗ рдЖрдХрд╛рд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рдХреИрд╕реЗ рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХреНрдпрд╛ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИ?

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

рдЖрдк рдЗрд╕реЗ рдореЙрдирд┐рдЯрд░ рдЖрдЗрдЯрдо рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЖрдЗрдЯрдо рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЬреЛрдбрд╝реЗрдВред

  beginDrag({ id }, monitor, component) {
    return {
      id,
      component
    };
  },

рдмрд╛рдж рдореЗрдВ рдбреНрд░реИрдЧрд▓реЗрдпрд░ рдореЗрдВ рдЖрдкрдХреЛ рдЖрдЗрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

const CustomDragLayer = DragLayer(monitor => ({
  item: monitor.getItem(),
  isDragging: monitor.isDragging() // useful
}))(CustomDragLayer);

рдЕрдм CustomDragLayer рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдЖрдкрдХреЛ рд╡рд╣ рдЖрдЗрдЯрдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╣реЛрдЧрд╛ред

class CustomDragLayer extends Component {
  constructor(props) {
    super(props);
    this.width;
    this.height;

    // Now you can eacily get height or width from node 
    const node = findDOMNode(props.item.component);
    console.log(node.clientWidth);
  }
...

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ findDOMNode constructor рдХреИрд╕рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ render рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдбреНрд░реИрдЧ рд╕реЛрд░реНрд╕ рдХрд╛ рдЖрдХрд╛рд░ рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдбреНрд░реИрдЧрд▓реЗрдпрд░ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ (http://gaearon.github.io/react-dnd/examples-drag-round-custom-drag-layer.html)

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

рдпрд╣рд╛рдВ рдХреБрдЫ рдЧреИрд░-рдХрд╛рд░реНрдпрд╢реАрд▓ рдХреЛрдб рд╣реИ - рдЫрд╡рд┐ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдСрдирд▓реЛрдб рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдпрд╛ рд╕реЗрдЯрдбреНрд░реИрдЧ рдЗрдореЗрдЬ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ:

рдХрдВрдкреЛрдиреЗрдВрдЯрдбрд┐рдбрдорд╛рдЙрдВрдЯ = () => {
this.setDragImage ();
};

рдХрдВрдкреЛрдиреЗрдВрдЯрдбрд┐рдбрдЕрдкрдбреЗрдЯ = () => {
this.setDragImage ();
};

рд╕реЗрдЯрдбреНрд░реИрдЧ рдЗрдореЗрдЬ = () => {
рдХрд╛рд╕реНрдЯ рдЫрд╡рд┐ = рдирдИ рдЫрд╡рд┐ ();
image.src = this.props.imgUrl;
рдЗрдореЗрдЬ.рдСрдирд▓реЛрдб = () => {
рдЫрд╡рд┐ред рдЪреМрдбрд╝рд╛рдИ = рдЫрд╡рд┐ред рдКрдВрдЪрд╛рдИ = 35;
this.props.connectDragPreview (рдЫрд╡рд┐);
}
};

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдЖрдк рдЗрд╕реЗ рдореЙрдирд┐рдЯрд░ рдЖрдЗрдЯрдо рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЖрдЗрдЯрдо рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЬреЛрдбрд╝реЗрдВред

  beginDrag({ id }, monitor, component) {
    return {
      id,
      component
    };
  },

рдмрд╛рдж рдореЗрдВ рдбреНрд░реИрдЧрд▓реЗрдпрд░ рдореЗрдВ рдЖрдкрдХреЛ рдЖрдЗрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

const CustomDragLayer = DragLayer(monitor => ({
  item: monitor.getItem(),
  isDragging: monitor.isDragging() // useful
}))(CustomDragLayer);

рдЕрдм CustomDragLayer рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдЖрдкрдХреЛ рд╡рд╣ рдЖрдЗрдЯрдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╣реЛрдЧрд╛ред

class CustomDragLayer extends Component {
  constructor(props) {
    super(props);
    this.width;
    this.height;

    // Now you can eacily get height or width from node 
    const node = findDOMNode(props.item.component);
    console.log(node.clientWidth);
  }
...

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ findDOMNode constructor рдХреИрд╕рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ render рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдбреНрд░реИрдЧ рд╕реЛрд░реНрд╕ рдХрд╛ рдЖрдХрд╛рд░ рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@MrBr , рдзрдиреНрдпрд╡рд╛рдж рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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