我一直在尝试使用 react-beautiful-dnd 库实现拖放功能。我从 redux 的初始状态显示一些按钮,并试图使这些项目可拖动。但是,由于某些原因,我在尝试移动按钮元素时在控制台中显示“无法找到具有 id: 的可拖动元素”的错误。这是第一次,我正在尝试实现这样的功能,但不确定我在哪里犯了错误。我知道Droppable
包装器应该有一个droppableId
但是基于我的状态数据的结构,我怎样才能传递 id?这是我已修改为使用拖放逻辑的 ListItems 组件:
import React from "react";
import { connect } from "react-redux";
import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd";
const ListItems = props => {
const onDragEnd = result => {
console.log("drag end");
};
return (
<DragDropContext onDragEnd={onDragEnd}>
<div>
List Items
<Droppable>
{provided => (
<div innerRef={provided.innerRef} {...provided.droppableProps}>
{props.items.map((item, index) => (
<Draggable key={item.id} draggableId={item.id} index={index}>
{provided => (
<div
className="user-lists"
key={item.id}
{...provided.draggableProps}
{...provided.dragHandleProps}
innerRef={provided.innerRef}
>
<button>{item.name}</button>
</div>
)}
</Draggable>
))}
{provided.placeholder}
</div>
)}
</Droppable>
</div>
</DragDropContext>
);
};
const mapStateToProps = state => ({
items: state.items.buttons
});
export default connect(
mapStateToProps,
{}
)(ListItems);
然后在 App 组件中使用 ListItems 组件。
对于完整的演示,这里是沙盒链接:
https://codesandbox.io/s/adoring-jones-roswh?file=/src/components/ListItems.js:0-1298
所以,我解决了这个问题,并且 Draggbale 正在相应地工作。但是,现在的问题是我无法通过单击或选择按钮元素来移动项目,而是需要从右侧拖动按钮。可能是因为包装按钮的 div 元素正在处理拖动。任何使按钮可拖动的修复程序都会很好..