Как интегрировать реагирующий ДНД с реагирующим полным каландром?
У меня есть следующая простая демонстрация для компонента перетаскивания с использованием плагина 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 (Droptarget)
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);
А потом, конечно, я использую элемент simpleDrag в моем app.js для рендеринга, и у меня есть рабочий пример DnD, теперь мой вопрос: как я могу использовать DnD на сайте fullcalender.js? IE говорят, что я хочу сделать каждый день ячейки в полном каландре выпадающей целью, как мне это сделать?
Приведенный выше код можно найти в моем репозитории github ЗДЕСЬ.
2 ответа
Вы можете интегрировать и использовать
ThirdPartyDraggable
интерфейс, предоставляемый (docs).
Однако важно отметить, что
fullcalendar
реагирует на события мыши, чтобы осуществить перетаскивание.
react-dnd
обеспечивает
html5-backend
, но они не очень хорошо работают вместе, поскольку API перетаскивания HTML5 отключает события мыши в пользу событий перетаскивания.
Таким образом, вы должны использовать альтернативный сервер, который использует эти события мыши. Например, этот .
Я реализовал песочницу с примером реализации.
для записи, хуки (о которых идет речь в React в функциональных компонентах) не могут использоваться в компонентах на основе классов (https://reactjs.org/warnings/invalid-hook-call-warning.html).
Возможно, вы захотите переписать свою карту и ящик как RFC вместо RCC.