【发布时间】:2018-11-11 00:31:38
【问题描述】:
我有以下使用 React DnD 插件的拖放组件的简单演示。
Card.js(DropSource)
import React, { Component } from 'react';
import { DragSource } from 'react-dnd';
const ItemTypes = {
CARD: 'card'
};
const cardSource = {
beginDrag(props) {
return { };
}
}
function collect(connect, monitor) {
return {
connectDragSource : connect.dragSource(),
connectDragPreview: connect.dragPreview(),
isDragging : monitor.isDragging()
}
}
class Card extends Component {
render() {
const { connectDragSource , isDragging } = this.props;
return connectDragSource(
<div style={{
opacity : isDragging ? 0.5 : 1,
height: '50px',
width: '50px',
backgroundColor: 'orange',
}}>
♞
</div>
);
}
}
export default DragSource(ItemTypes.CARD, cardSource , collect)(Card);
Box.js(放置目标)
import React, { Component } from 'react';
import { DropTarget } from 'react-dnd';
const boxTarget = {
canDrop(props) {
},
drop(props) {
}
};
function collect(connect, monitor) {
return {
connectDropTarget: connect.dropTarget(),
isOver: monitor.isOver(),
canDrop: monitor.canDrop()
};
}
const ItemTypes = {
CARD: 'card'
};
class Box extends Component {
render() {
const { connectDropTarget, isOver, canDrop } = this.props;
return connectDropTarget(
<div style={{
position: 'relative',
width: '200px',
height: '200px',
background: canDrop ? '#ff0000' : '#eee'
}}>
{ this.props.children }
</div>
);
}
}
export default DropTarget(ItemTypes.CARD, boxTarget, collect)(Box);
simpleDrag.js
import React, { Component } from 'react';
import { DragDropContext } from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';
import CARD from './card';
import BOX from './box';
class simpleDrag extends Component {
render() {
return(
<div>
<BOX />
<CARD/>
</div>
);
}
}
export default DragDropContext(HTML5Backend)(simpleDrag);
当然,我在 app.js 中使用 simpleDrag 元素进行渲染,并且我有一个有效的 DnD 示例,现在我的问题是如何在站点 fullcalender.js 中使用 DnD? IE。说我想让完整日历中的每一天单元格成为可放置的目标,我该怎么做?
以上代码可以在我的github repoHERE中找到。
【问题讨论】:
-
您可以从
react-big-calendar获得见解。此日历的灵感来自 Fullcalendar,并且已经与react-dnd集成。 Here's a workingreact-big-calendar的拖放演示 + 有源代码。 -
@JordanEnev 谢谢,我正在调查,但我想知道如何拖放外部事件,现在就尝试这样做。
-
Here's a working example 带有外部事件(但使用 jQuery 可拖动)。因此,根据示例,您必须找到一种方法来获取
DropSourcedom 节点元素并向其添加具有一些 Fullcalendar 属性的data属性。因此,在成功删除(Fullcalendardrop处理程序)时,您必须以某种方式删除DropSource,因为它将被添加到 Fullcalendar。 -
你解决了吗?
-
@Dupocas 伙计我没有,我确定有解决方案,但我还没有研究过