У меня довольно простой компонент перетаскивания
У меня работает функция перетаскивания, но когда я перетаскиваю свой элемент в dropZone
, элемент добавляется в массив, а не удаляется элемент от предыдущего dropZone
. Например, если я перетащу элемент из dropZone zone-1
в dropZone zone-2
, он появится в обоих местах. По сути, клонирую предмет, я думаю?
Вот мой код
class App extends Component {
constructor(props) {
super(props);
this.state = {
dropZones: {
"zone-1": {
id: "zone-1",
title: "zone-1",
items: [
{ taskID: 1, task: "I am label 1" },
{ taskID: 2, task: "I am label 2" }
]
},
"zone-2": {
id: "zone-2",
title: "zone-2",
items: []
},
"zone-3": {
id: "zone-3",
title: "zone-3",
items: [{ taskID: 4, task: "I am label 4" }]
}
},
zoneOrder: ["zone-1", "zone-2", "zone-3"],
draggedItem: {}
};
}
onDrag = (event, item) => {
event.preventDefault();
this.setState({
draggedItem: item
});
};
onDragOver = event => {
event.preventDefault();
};
onDrop = event => {
const { dropZones, draggedItem } = this.state;
console.log("dropzoneItems", event.target);
this.setState({
dropZones: {
...dropZones,
[event.target.id]: {
...dropZones[event.target.id],
items: [...dropZones[event.target.id].items, draggedItem]
}
},
draggedItem: {}
});
};
render() {
return (
<div className="App">
<Container>
<div
onDrop={event => this.onDrop(event)}
onDragOver={event => this.onDragOver(event)}
className="todos"
>
{this.state.zoneOrder.map(zoneId => {
const dropZone = this.state.dropZones[zoneId];
const items = dropZone.items.map(items => items[items]);
console.log("dropZone", dropZone);
return (
<Zone
id={dropZone.id}
key={dropZone.id}
dropZone={dropZone}
items={items}
>
{dropZone.items.map((item, index) => (
<div
draggable
onDrag={event => this.onDrag(event, item)}
key={item.taskID}
>
{item.task}
</div>
))}
</Zone>
);
})}
</div>
</Container>
</div>
);
}
}
export default App;