You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-beautiful-dnd仅可拖动可放置容器最后一项问题及多拖拽库推荐

问题诱因
  • 核心诱因1:列表渲染未配置唯一key属性
    你提供的upFlow.map遍历逻辑中,返回<Action>组件时没有设置React要求的唯一key属性,或误用了数组下标作为key。React会复用没有正确标记key的DOM节点,导致beautiful dnd内部的draggable实例注册逻辑异常,仅最后一个条目能被正确识别,其余条目实例被覆盖,拖拽时就会找不到对应id的draggable。
  • 核心诱因2:index参数传入错误
    你在<Draggable>中传入的indexInRenderOrder如果不是当前遍历的数组下标(比如是自定义计算的、存在重复/顺序错误的数值),会导致beautiful dnd内部索引和实际条目不匹配,无法定位到对应的draggable实例。
  • 其他可能诱因:状态更新不符合不可变原则
    如果修改upFlow数组时直接修改原数组而非返回新数组(比如用push、splice直接改原状态),React不会触发完整重渲染,beautiful dnd无法更新内部注册的draggable列表,仅新增条目会被注册,历史条目无法被识别。
修复建议
  • 给map返回的<Action>组件添加唯一key,值用actionId.id即可,不要用数组下标。
  • 将<Draggable>的index参数替换为map遍历自带的下标,不要用自定义计算的indexInRenderOrder。
  • 所有修改upFlow数组的逻辑都遵循不可变原则,用展开运算符、filter、map等返回新数组的方法更新状态。
支持多拖拽的React DnD库推荐
  • @dnd-kit/core:目前React生态最主流的拖拽库,是已停止维护的beautiful dnd的官方推荐替代方案,原生支持多选拖拽,性能优异、无障碍支持完善、自定义程度高。
  • @hello-pangea/dnd:beautiful dnd的社区维护Fork版本,完全兼容原beautiful dnd的API,迁移成本极低,支持扩展多拖拽能力,持续更新修复bug。
  • react-dnd:老牌React拖拽库,生态成熟稳定,支持复杂场景的多拖拽需求,可灵活自定义多选逻辑。
  • react-sortablejs:基于跨框架SortableJS的React封装,轻量易上手,内置多选拖拽能力,适合快速实现简单排序场景。

内容的提问来源于stack exchange,提问作者ThisOptimism

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:07