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

React仪表板多行多列卡片XY方向拖拽重排方案咨询

React仪表板拖拽卡片功能开发求助

我正在React中开发一款仪表板,需要创建多个可拖拽重排的卡片。参考示例框架:

仪表板布局示例

上图包含5行布局,每行的列数各不相同。我需要实现以下拖拽重排功能:

  • X方向(行内横向):每行内的卡片可调整横向顺序
  • Y方向(行间纵向):所有行可调整纵向顺序

为实现该功能,我已尝试使用react-dnd,相关代码如下:

import React from "react";
import { useDrag, useDrop, DndProvider } from "react-dnd";
import { HTML5Backend } from "react-dnd-html5-backend";

const DraggableItem = ({ children }) => {
  const [{ isDragging }, dragRef] = useDrag(() => ({
    type: "item",
    collect: (monitor) => ({
      isDragging: monitor.isDragging(),
    }),
  }));

  return (
    <div ref={dragRef} style={{ opacity: isDragging ? 0.5 : 1 }}>
      {children}
    </div>
  );
};

const DroppableArea = () => {
  const [, dropRef] = useDrop(() => ({
    accept: "item",
    drop: (item, monitor) => {
      // handle drop event
      console.log("Item dropped:", item);
    },
  }));

  return <div ref={dropRef}>Droppable Area</div>;
};

export const ChartDashboard = () => (
  <DndProvider backend={HTML5Backend}>
    <main className="w-full p-4 pt-20 overflow-scroll h-screen">
      <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
        <DraggableItem>
          <div className="border-2 border-dashed border-gray-300 rounded-lg dark:border-gray-600 h-32 md:h-64">
            1
          </div>
        </DraggableItem>
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-32 md:h-64">
            2
          </div>
        </DraggableItem>
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-32 md:h-64">
            3
          </div>
        </DraggableItem>
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-32 md:h-64">
            4
          </div>
        </DraggableItem>
      </div>
      <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-96 mb-4">
        5
      </div>
      <div className="grid grid-cols-2 gap-4 mb-4">
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72">
            6
          </div>
        </DraggableItem>
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72">
            7
          </div>
        </DraggableItem>
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72">
            8
          </div>
        </DraggableItem>
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72">
            9
          </div>
        </DraggableItem>
      </div>
      <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-96 mb-4">
        10
      </div>
      <div className="grid grid-cols-2 gap-4">
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72">
            11
          </div>
        </DraggableItem>
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72">
            12
          </div>
        </DraggableItem>
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72">
            13
          </div>
        </DraggableItem>
        <DraggableItem>
          <div className="border-2 border-dashed rounded-lg border-gray-300 dark:border-gray-600 h-48 md:h-72">
            14
          </div>
        </DraggableItem>
      </div>
      <DroppableArea />
    </main>
  </DndProvider>
);

我需要帮助完成该功能的开发,不确定选用哪个拖拽库最为合适,希望获得技术支持。支持该功能的其他库还有react-beautiful-dnd、react-sortable-hoc等,使用任意合适的库均可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:18:07