Давайте не будем терять время и сразу перейдем к коду.

import React, { Component } from 'react';
import './drag.less';
export default class ToDoDragDropDemo extends Component {
constructor(props){
 super(props);
this.state={
tasks: [
{id: "1", taskName:"Read book",type:"inProgress", backgroundColor: "red"},
{id: "2", taskName:"Pay bills", type:"inProgress", backgroundColor:"red"},
{id: "3", taskName:"Go to the gym", type:"Done", backgroundColor:"green"},
{id: "4", taskName:"Play baseball", type:"Done", backgroundColor:"green"},
{id: "5", taskName:"Go to the work", type:"inProgress", backgroundColor:"red"}
]
}
}
onDragStart = (event, taskName) => {
event.dataTransfer.setData("taskName", taskName);
}
onDragOver = (event) => {
event.preventDefault();
}
onDrop = (event, cat) => {
let taskName = event.dataTransfer.getData("taskName");
let tasks = this.state.tasks.filter((task) => {
if (task.taskName == taskName) {
task.type = cat;
cat==="Done"?task.backgroundColor = "green":task.backgroundColor = "red";
}
return task;
});
this.setState({
...this.state,
tasks
});
}
render() {
let tasks = {
inProgress: [],
Done: []
}
this.state.tasks.forEach ((task) => {
tasks[task.type].push(
<div key={task.id}
onDragStart = {(event) => this.onDragStart(event, task.taskName)}
draggable
className="draggable"
style = {{backgroundColor: task.backgroundColor}}>
{task.taskName}
</div>
);
});
return (
<div className="drag-container">
<h2 className="head">Drag & Drop</h2>
<div className="inProgress"
onDragOver={(event)=>this.onDragOver(event)}
onDrop={(event)=>{this.onDrop(event, "inProgress")}}>
<span className="group-header">In Progress</span>
{tasks.inProgress}
</div>
<div className="droppable"
onDragOver={(event)=>this.onDragOver(event)}
onDrop={(event)=>this.onDrop(event, "Done")}>
<span className="group-header">Done</span>
{tasks.Done}
</div>
</div>
);
}
}

Итак, в файле drag.jsx вы прописываете весь функционал и импортируете его.

У вас есть объект задачи, который представляет собой набор задач, которые необходимо выполнить, и задач, которые выполняются.

У вас есть три основные функции. onDrop, onDragStart, onDragOver

Перетаскивание достигается за счет того, что свойство элемента div становится перетаскиваемым, а затем вызываются следующие функции.

Рассмотрим файл css

.App {
width: 100%;
margin: 10px auto;
}
.drag-container {
text-align: center;
}
.head {
display: inline-block;
margin: 10px;
padding: 0;
background-color: #CCCCCC;
width:100%;
}
.droppable {
position: absolute;
width: 200px;
height: 500px;
right: 50px;
top: 10;
background-color: #9E9E9E;
border-left: 2px dotted red;
}
.draggable {
width: 100px;
height: 100px;
background-color: yellow;
margin: 10px auto;
}
.inProgress {
position: absolute;
width: 200px;
height: 500px;
left: 0;
top: 10;
background-color: #EEEEEE;
border-right: 2px dotted red;
}

После копирования всего кода это будет выглядеть примерно так:

Теперь вы можете перетаскивать статус задач.

Спасибо за ваше время, надеюсь, что это было полезно…

*********************КОНЕЦ*******************