在单个 Droppable 中,我映射了一个项目数组,每个项目都有自己的 Draggable。我的代码工作正常,并且正在执行预期的操作(即,我可以单独移动每个 Draggable)。我只是想知道是否有办法阻止我的其余 Draggables“向上移动”或替换被拖动的项目留下的空白位置。
这是我的代码(DragDropContext 在另一个组件中,因此此处未显示):
<Droppable
droppableId='itemDroppable'
type='acceptsItems'
isDropDisabled={true} >
{(provided) =>
<div ref={provided.innerRef}>
{this.props.items.map((item, index) =>
<Draggable
key={item.id}
draggableId={item.name}
index={index} >
{provided =>
<div
ref={provided.innerRef}
{...provided.draggableProps}
{...provided.dragHandleProps} >
{item.icon}
</div>
}
</Draggable>
)}
{provided.placeholder}
</div>
}
</Droppable>
这是正在发生的事情的视频:
如您所见,以下其余图标会向上移动并替换从可放置对象中拖出的项目留下的空白位置。有办法阻止这种情况吗?理想情况下,我希望空白位置保持空白,而不是让其余的正在进行的图标向上移动并填满。
提前谢谢您!
我没有直接的解决方案,但我有一个可以解决这个问题的想法。
当您使用
Array.map()
功能{(provided) => (
<div ref={provided.innerRef}>
{this.props.items.map((item, index) => {
if (item.id !== 0) {
return (
<Draggable
key={item.id}
draggableId={item.name}
index={index}
>
{(provided) => (
<div
ref={provided.innerRef}
{...provided.draggableProps}
{...provided.dragHandleProps}
>
{item.icon}
</div>
)}
</Draggable>
);
} else
return (
<div style={{ width: '20px', height: '20px' }} /> //display hidden undraggable hidden element or try provided.placeholder
);
})}
{provided.placeholder}
</div>
)}
onDragEnd()
中实现删除功能时,我们可以更改该元素的标志。这可能不是正确的解决方案,而是一种解决方法。
<Draggable
key={item.id}
draggableId={item.name}
index={index}
>
{(provided, snapshot) => (
<>
<div
ref={provided.innerRef}
{...provided.draggableProps}
{...provided.dragHandleProps}
>
{item.icon}
</div>
{
snapshot.isDragging && (
<div style={{ width: '20px', height: '20px' }} />
)
}
</>
)}
</Draggable>;