React-dnd: рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рд▓реЗрдпрд░ HTML рд╕реНрдЯрд╛рдЗрд▓ рдФрд░ рдХрд╕реНрдЯрдо рд▓реЗрдпрд░ рджреЛрдиреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдордИ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: react-dnd/react-dnd

рдирдорд╕реНрддреЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореЗрд░реА рдХрд╕реНрдЯрдо рдбреНрд░реИрдЧ рд▓реЗрдпрд░ рдореЗрд░реА рдХрд╕реНрдЯрдо рдФрд░ 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 рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рд╢реЗрд╡ рдХрд░реЗрдВред рдЙрд╕ рд╕рд╛рдл рд╕реНрд▓реЗрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдлрд┐рд░ рдЙрд╕рдореЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЪреАрдЬреЗрдВ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝реЗрдВред

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

ItemDragPreview рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ? рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ ItemDragPreview рднреА рдПрдХ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк ItemDragPreview рдХреЗ рднреАрддрд░ рд░рд╛рдЬреНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рднреА рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрд╕ рдШрдЯрдХ рдХреЗ рднреАрддрд░ html/jsx рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рд╢реЗрд╡ рдХрд░реЗрдВред рдЙрд╕ рд╕рд╛рдл рд╕реНрд▓реЗрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдлрд┐рд░ рдЙрд╕рдореЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЪреАрдЬреЗрдВ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝реЗрдВред

рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореБрдЭреЗ рдХрдиреЗрдХреНрдЯрд░ рдореЗрдВ рдбреНрд░реИрдЧ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рднреА рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ред рдЕрдм рд╕рдм рдЕрдЪреНрдЫрд╛

рдореБрдЭреЗ рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ, "рдХрдиреЗрдХреНрдЯрд░ рдореЗрдВ" рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?

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

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

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

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

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

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

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