javascript - react /Dnd : Make a component draggable and droppable at the same time

标签 javascript reactjs drag-and-drop react-dnd

有多个元素,我希望它们同时可拖放 - 使用 react dnd。 这意味着我需要将其中一个元素拖放到另一个元素上。

首先,我为 MyComponent 定义了 dragSource。到目前为止有效。 但是我该如何为同一组件设置 DropTarget?

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

const elementSource = {
  beginDrag (props) {
    return { }
  }
}
const elementTarget = {
  drop (props, monitor) { }
}

function collect (connect, monitor) {
  return {
    connectDragSource: connect.dragSource(),
    isDragging: monitor.isDragging(),
    connectDropTarget: connect.dropTarget(),
    isOver: monitor.isOver()
  }
}

class MyComponent extends Component {
  render () {
    const { connectDragSource, isDragging, connectDropTarget, isOver } = this.props

    return connectDragSource(
      <div style={{ opacity: isDragging ? 0.5 : 1 }} >
        Just an example
      </div>
    )
  }
}

export default DragSource('element', elementSource, collect)(MyComponent)

最佳答案

这可以通过 React-DND 实现。 它需要将可拖动元素同时导出为源和目标。

您可以将组件定义为

class MyComponent extends Component {
  render () {
    const { connectDragSource, isDragging, connectDropTarget, isOver } = this.props

    return connectDragSource(connectDropTarget(
      <div style={{ opacity: isDragging ? 0.5 : 1 }} >
        Just an example
     </div>
    ))
  }
}

MyComponent = DragSource('MyComponent', elementSource, (connect, 
monitor) => ({
  connectDragSource: connect.dragSource(),
  isDragging: monitor.isDragging()
}))(MyComponent);

MyComponent = DropTarget('MyComponent', elementTarget, connect => ({
  connectDropTarget: connect.dropTarget(),
}))(MyComponent);

export default MyComponent;

同样的例子可用 here .不过它使用生成器。

关于javascript - react /Dnd : Make a component draggable and droppable at the same time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46257882/

相关文章:

javascript - 动态对象属性名?

node.js - 为什么 Gatsby 不再识别站点目录中的组件?

arrays - react .js : How to properly append multiple items to an array state using its use-state hook setter?

javascript - 防止默认将图像拖放到浏览器中

JQuery拖放-droppable包含draggable

javascript - 在拖动链接时阻止 chrome 将光标更改为地球仪

javascript - head 中的重定位是否会停止页面其余部分的加载?

javascript - 网址已更改,但 AngularJS 中没有显示任何内容

javascript - 使用 ng-change 更新 Angular 模型

javascript - Redux/React-Router - 能够通过客户端路由发送带有参数的 URL