SortableItem拖拽组件里的Popconfirm失效
1. 场景:umi3升级umi4后,出现这个问题,Popconfirm不生效,在SortableItem/拖拽组件里
2. 原因:
Popconfirm 不起作用的原因是由于 react-sortable-hoc
库与 Popconfirm 组件之间的事件冲突。在 SortableElement 中,拖拽功能会拦截掉一些鼠标事件,导致 Popconfirm 无法正常触发。这是 react-sortable-hoc
的一个常见问题。
3. 解决:
添加移动手柄,修改了移动区域,不再覆盖Popconfirm区域,Popconfirm正常使用
- 只有拖拽把手(左侧 icon)区能拖拽,其他区域只响应正常点击,Popconfirm等弹窗控件都可以点击弹出,不会被拖拽事件抢走。
- 删除按钮上的
onMouseDown={e => e.stopPropagation()}
可以防止拖拽,但不影响点击。import { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';const DragHandle = SortableHandle(() => (<span style={{ cursor: 'grab', marginRight: 8, marginTop: 3 }}><MenuOutlined /></span>));<SortableContainerNewuseDragHandle //这个属性helperClass="row-dragging"onSortEnd={(e, i) => onSortEnd(i, e.oldIndex, e.newIndex)}><SortableItemkey={idx}index={idx}value={<Row gutter={8} key={idx}>{/* 拖拽把手区,只这一块允许拖 */}<Col span={1}><DragHandle /></Col><Col span={21}> ...内容... </Col><Col span={2}><Popconfirm ...><Buttonblockstyle={{ border: 'none' }}icon={<DeleteOutlined />}onMouseDown={e => e.stopPropagation()}/></Popconfirm></Col></Row>} />