我有个需求需要在同一个页面中同时存在使用react-dnd库的table拖拽和使用sortablejs库的div拖拽,出现了下面这个问题

大模型给我推荐的解决方案有一下几种,并推荐使用一和三结合

1. 阻止ReactSortable的拖放事件冒泡,避免被react-dnd捕获。

2. 更换react-dnd的后端为TouchBackend,并限制其作用范围。

3. 使用CSS或事件处理隔离两者的拖放区域。

4. 调整两者的配置,确保不监听相同的元素或事件类型。

通过验证下来第一种,第三种都不生效,第四种由于不符合我的代码结构所以没有试验

第三种方法可以解决这个问题

使用 TouchBackend 或 MouseBackend 替代 HTML5Backend,减少事件冲突。

npm install react-dnd-touch-backend
import { DndProvider } from 'react-dnd';
import { TouchBackend } from 'react-dnd-touch-backend';

// 在组件中使用:
<DndProvider 
  backend={TouchBackend} 
  options={{ enableMouseEvents: true }} // 允许鼠标事件
  key="menuMenus"
>
  {/* 你的组件 */}
</DndProvider>

除此之外,为了解决Sortablejs中scrollSensitivity不起作用的问题,我给ReactSortable中添加了forceFallback=true意外发现可以解决上述问题,具体描述可以看我的另一篇帖子Sortablejs中scrollSensitivity不起作用_sortablejs滚动问题-CSDN博客

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐