1

发生的情况是,当我在一列中有多个项目并尝试拖动一个时,只显示一个,根据此处找到的课程,我应该可以在同一列中移动项目但不能。在 React 开发工具中,状态和 rb-dnd id 看起来不错,但我知道什么?我只是一个菜鸟。这是我onDragEnd到目前为止所拥有的。

  onDragEnd = result => {
    const { destination, source, draggableId } = result;
    if (!destination) return;
    if (
      destination.droppableId === source.droppableId &&
      destination.index === source.index
    ) {
      return;
    }
    let start = this.state.list[source.droppableId];
    let finish = this.state.list[destination.droppableId];
    if (start === finish) {
      let updatedList = this.state.list.map(obj => {
        if (obj.id === source.droppableId) {
          obj.cards.splice(source.index, 1);
          obj.cards.splice(destination.index, 0, draggableId);
        }
        return obj;
      });
      this.setState({ list: updatedList });
    }

我的应用程序可以在这里找到。谢谢。

4

1 回答 1

1

在您的代码中,onDragEnd您有此代码,这就是为什么您不能重新排列同一列表中的项目的原因。当您在同一个列表中移动项目时,源和目标 Droppable ID 将相同。

if (destination.droppableId === source.droppableId && destination.index === source.index) {
  console.log("they're equal");
  return;
}
  1. 在您的组件上,列表中所有项目的可拖动 ID 相同。对于每个可拖动的项目,它应该是唯一的。
const Card = props => {
  return (
    // This is NOT unique. This should be dynamic, we should use idx probably.
    <Draggable draggableId={props.col + "-" + props.color} index={props.idx}>
      {provided => (

更正这两个后,我可以移动项目:https ://codesandbox.io/s/r5z28w85yo 。希望这会有所帮助。

于 2019-03-30T21:07:01.930 回答