React-dnd: ИспользованиС DragSource ΠΈ DropTarget Π½Π° ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, Π½ΠΎ Π½Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ DropTarget

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 12 Π°ΠΏΡ€. 2018  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: react-dnd/react-dnd

Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ это скорСС ΠΊΠ°ΠΊ справочный Ρ„ΠΎΡ€ΡƒΠΌ, Π½ΠΎ, нСсмотря Π½Π° большиС усилия, я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ DropTarget Π² этом случаС использования.

Π― Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΡŽ Β«ΠΊΠ°Ρ€Ρ‚ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ события пСрСтаскивания Π½Π° сСбя.

Π― дСлаю ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π²ΠΎΠΏΠΈΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠ°Ρ…ΠΈ здСсь?

Π― ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DragSource Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ спСцификации DropTarget, Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² консоль, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

import React, { Component } from 'react'
import { DropTarget, DragSource } from 'react-dnd'
import _ from 'lodash'

export const ItemTypes = {
    CATEGORY: 'category-item'
}

class CategoryTreeFork extends Component {

    componentWillReceiveProps = (nextProps) => {
        console.log("Next cat props", nextProps)
    }

    render(){
        var { thisCat, childCat, level, dropEvent } = this.props
        const { connectDragSource, connectDropTarget, isDragging, isOver } = this.props

        return connectDragSource(
            <div className="category-tree-fork">
                <div className={`category-list-item level-${level}`}
                    style={{
                        opacity: isDragging ? 0.5 : 1,
                        backgroundColor: isOver ? "red" : "silver"
                    }}>
                    {thisCat.name}
                </div>
            </div>
        )   
    }   
}

/* get dragged */
const sourceSpec = { 
    beginDrag(props){
        return { category_id: props.thisCat.category_id }
    }   
}

const sourceCollect  = (connect, monitor) => {
    return {
        connectDragSource: connect.dragSource(),
        isDragging: monitor.isDragging()
    }
}


/* get dragged onto */
const targetSpec  = {
    drop(props, monitor, component) {
        const item = monitor.getItem()
        console.log("me or my friend?", item)
    },
    hover(props, monitor, component){
        console.log("yo what you hoverin there for homie?")
    }
}

const targetCollect = (connect, monitor) => {
    return {
        connectDropTarget: connect.dropTarget(),
        isOver: monitor.isOver()
    }
}


export default _.flow([
    DragSource(ItemTypes.CATEGORY, sourceSpec, sourceCollect),
    DropTarget(ItemTypes.CATEGORY, targetSpec, targetCollect)
])(CategoryTreeFork)

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

для людСй, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΡ… ΠΈΠ· поисковой систСмы ΠΈ ΠΈΡ‰ΡƒΡ‰ΠΈΡ… способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DragSource ΠΈ DropTarget Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ Π±Π΅Π· использования _.flow , Π²ΠΎΡ‚ ΠΊΠ°ΠΊ Π²Ρ‹ это Π΄Π΅Π»Π°Π΅Ρ‚Π΅:

export default
    DragSource(typeA, specA, collectA)(
        DropTarget(typeB, specB, collectB)(
            Component));

ВсС 3 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

DX Π½Π΅Π²Π°ΠΆΠ½ΠΎ, понял Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ послС этого я Π·Π°Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ connectDropTarget Π½Π° Ρ€Π΅Π½Π΄Π΅Ρ€Π΅. Π­Ρ‚ΠΎ исправлСниС:

 return connectDropTarget(connectDragSource(
            <div className="category-tree-fork">
                <div className={`category-list-item level-${level}`}
                    style={{
                        opacity: isDragging ? 0.5 : 1,
                        backgroundColor: isOver ? "red" : "silver"
                    }}>
                    {thisCat.name}
                </div>
            </div>

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ»ΠΎ ΠΌΠΎΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСйчас. Π‘Π»Π΅Π΄ΠΎΠ²Π°Π» «простому», сортируСмому ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΈ сдСлал Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» connectDropTarget

для людСй, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΡ… ΠΈΠ· поисковой систСмы ΠΈ ΠΈΡ‰ΡƒΡ‰ΠΈΡ… способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DragSource ΠΈ DropTarget Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ Π±Π΅Π· использования _.flow , Π²ΠΎΡ‚ ΠΊΠ°ΠΊ Π²Ρ‹ это Π΄Π΅Π»Π°Π΅Ρ‚Π΅:

export default
    DragSource(typeA, specA, collectA)(
        DropTarget(typeB, specB, collectB)(
            Component));
Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ