рдирдорд╕реНрддреЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореЗрд░реА рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рд▓реЗрдпрд░ рдореЗрд░реА рдХрд╕реНрдЯрдо рдФрд░ HTML рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢реИрд▓реА рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣реА рд╣реИред рд╕рд╛рде рд╣реА рдореБрдЭреЗ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЬрд╛ рд░рд╣реА рд╣реИ рдХрд┐ "рд╕реЗрдЯрд╕реНрдЯреЗрдЯ рдХреЛ рдЕрджреНрдпрддрди рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ"ред
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:
import React from 'react';
import PropTypes from 'prop-types';
import { DragLayer } from 'react-dnd';
import ItemDragPreview from './ItemDragPreview';
const layerStyles = {
position: 'fixed',
pointerEvents: 'none',
zIndex: 200000
};
function getItemStyles(props){
const {initialOffset, currentOffset} = props;
if (!initialOffset || !currentOffset) {
return {
display: 'none'
};
}
let {x,y} = currentOffset;
const transform = `translate(${x}px,${y}px)`;
return{
transform
};
}
class CustomDragLayer extends React.Component{
static propTypes = {
item: PropTypes.object,
itemType: PropTypes.string,
initialOffset: PropTypes.shape({
x: PropTypes.number.isRequired,
y: PropTypes.number.isRequired
}),
currentOffset: PropTypes.shape({
x: PropTypes.number.isRequired,
y: PropTypes.number.isRequired
}),
isDragging: PropTypes.bool.isRequired,
}
renderItem(type,item){
return (<ItemDragPreview ruleitem={item}/>);
}
render(){
const {item,itemType,isDragging} = this.props;
if(!isDragging){
return null;
}
return (
<div style={layerStyles}>
<div style={getItemStyles(this.props)}>
{this.renderItem(itemType,item)}
</div>
</div>
);
}
}
let collect = monitor =>{
return {
item: monitor.getItem(),
itemType: monitor.getItemType(),
currentOffset: monitor.getSourceClientOffset(),
initialOffset: monitor.getInitialSourceClientOffset(),
isDragging: monitor.isDragging()
};
}
export default DragLayer(collect)(CustomDragLayer);
рдпрд╣рд╛рдБ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ:
рдЪреЗрддрд╛рд╡рдиреА: рд╕реЗрдЯрд╕реНрдЯреЗрдЯ (...): рдореМрдЬреВрджрд╛ рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ (рдЬреИрд╕реЗ
render
рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдХ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рднреАрддрд░)ред рд░реЗрдВрдбрд░ рдореЗрдердбреНрд╕ рдкреНрд░реЙрдкреНрд╕ рдФрд░ рд╕реНрдЯреЗрдЯ рдХрд╛ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдПрдХ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗcomponentWillMount
рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдЕрдВрдд рдореЗрдВ рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж!
ItemDragPreview рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ? рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ ItemDragPreview рднреА рдПрдХ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк ItemDragPreview рдХреЗ рднреАрддрд░ рд░рд╛рдЬреНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рднреА рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрд╕ рдШрдЯрдХ рдХреЗ рднреАрддрд░ html/jsx рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рд╢реЗрд╡ рдХрд░реЗрдВред рдЙрд╕ рд╕рд╛рдл рд╕реНрд▓реЗрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдлрд┐рд░ рдЙрд╕рдореЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЪреАрдЬреЗрдВ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝реЗрдВред
рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореБрдЭреЗ рдХрдиреЗрдХреНрдЯрд░ рдореЗрдВ рдбреНрд░реИрдЧ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рднреА рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ред рдЕрдм рд╕рдм рдЕрдЪреНрдЫрд╛
рдореБрдЭреЗ рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ, "рдХрдиреЗрдХреНрдЯрд░ рдореЗрдВ" рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
ItemDragPreview рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ? рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ ItemDragPreview рднреА рдПрдХ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк ItemDragPreview рдХреЗ рднреАрддрд░ рд░рд╛рдЬреНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рднреА рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрд╕ рдШрдЯрдХ рдХреЗ рднреАрддрд░ html/jsx рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рд╢реЗрд╡ рдХрд░реЗрдВред рдЙрд╕ рд╕рд╛рдл рд╕реНрд▓реЗрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдлрд┐рд░ рдЙрд╕рдореЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЪреАрдЬреЗрдВ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝реЗрдВред