【发布时间】:2021-07-02 19:14:18
【问题描述】:
我正在使用react-beautiful-dnd 制作一些使用Material UI ListItems 的可拖动列表项。
我的ListItems 有一个ListItemText 和一个ListItemSecondaryAction,这是一个用于打开上下文菜单的目标(包含一个图标)。
const DraggableListItem = ({ leaf, index, path, handleClick }) => {
return (
<Draggable draggableId={String(leaf.id)} index={index}>
{(provided) => (
<ListItem
{...provided.draggableProps}
{...provided.dragHandleProps}
innerRef={provided.innerRef}
button component={NavLink}
to={path + '/' + leaf.id}
>
<ListItemText primary={leaf.content} />
<ListItemSecondaryAction>
<IconButton edge="end" aria-label="more options" value={JSON.stringify(leaf)} onClick={handleClick}>
<MoreHorizIcon />
</IconButton>
</ListItemSecondaryAction>
</ListItem>
)}
</Draggable>
)
}
我面临的问题是,当拖动 Draggable 时,ListItemSecondaryAction 内的上下文菜单图标会向上移动一点然后冻结,尽管 ListItemText 按预期被拖动。
您可以在下面看到项目被拖到列表顶部,而其他ListItemTexts 正在围绕占位符/拖放项目重新排列。然而,被拖动的项目的上下文菜单图标被冻结在它以前的位置之上,并且其他项目的上下文菜单图标没有移动到新的位置。
只需将ListItemSecondaryAction 替换为div 即可解决问题,但我需要ListItemSecondaryAction 提供的目标。
在拖动项目方面,以下内容按预期工作:IconButton 被拖动到 Draggable 内。
<div>
<IconButton>
<MoreHorizIcon />
</IconButton>
</div>
我尝试只在不拖动时渲染ListItemSecondaryAction(而不是在拖动时渲染div),但是仍然存在延迟,其中被拖动项目的上下文菜单显示卡在一个位置短暂的一段时间。我也可以在拖动时根本不渲染上下文菜单的目标 + 图标,但是会发生同样难看的图标卡在奇怪的地方一秒钟的问题。
当IconButton在ListItemSecondaryAction内部时,如何确保Draggable与Draggable一起被拖动?
【问题讨论】:
标签: javascript reactjs react-material react-beautiful-dnd