首页 > 其他分享 >React中使用dnd-kit实现拖曳排序功能

React中使用dnd-kit实现拖曳排序功能

时间:2024-07-15 15:29:40浏览次数:21  
标签:dnd const 排序功能 newItems kit active 拖拽

在React中使用`dnd-kit`库实现拖拽排序功能,你需要遵循以下步骤:

1. **安装dnd-kit**:首先,确保你已经安装了`dnd-kit`库。如果还没有安装,可以通过npm或yarn来安装:
   ```bash
   npm install @dnd-kit/core
   ```

2. **引入必要的组件和钩子**:从`dnd-kit`中引入`Draggable`、`DragOverlay`和`useDraggable`等组件和钩子。

3. **设置拖拽列表**:使用`Draggable`组件来包裹可拖拽的元素,并设置其属性。

4. **处理拖拽事件**:使用`useDraggable`钩子来处理拖拽过程中的事件,如开始拖拽、拖拽中和拖拽结束。

5. **渲染拖拽覆盖层**:使用`DragOverlay`组件来渲染拖拽时的覆盖层。

6. **更新数据**:在拖拽结束时,根据拖拽元素的新位置更新你的数据。

下面是一个简单的拖拽排序功能的示例代码:

```jsx
import React, { useState } from 'react';
import { Draggable, Droppable, DragOverlay, useDraggable, useDroppable } from '@dnd-kit/core';

const initialItems = ['item-1', 'item-2', 'item-3'];
const [items, setItems] = useState(initialItems);

function SortableList() {
  const handleDragEnd = (event) => {
    const { active, over } = event;
    if (active.id !== over.id) {
      const oldIndex = initialItems.indexOf(active.id);
      const newIndex = initialItems.indexOf(over.id);
      setItems((prevItems) => {
        const newItems = [...prevItems];
        [newItems[oldIndex], newItems[newIndex]] = [newItems[newIndex], newItems[oldIndex]];
        return newItems;
      });
    }
  };

  return (
    <div>
      <DragOverlay>
        {active && (
          <div style={{ transform: `translate(${active.offset.x}px, ${active.offset.y}px)` }}>
            {active.id}
          </div>
        )}
      </DragOverlay>
      <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>
        {items.map((item) => (
          <Draggable key={item} id={item} onDragEnd={handleDragEnd}>
            {(dragRef, dragProps) => (
              <div ref={dragRef} {...dragProps}>
                {item}
              </div>
            )}
          </Draggable>
        ))}
      </div>
    </div>
  );
}

export default SortableList;
```

在这个示例中,我们创建了一个可拖拽的列表,列表中的每个元素都被包裹在`Draggable`组件中。我们使用`useDraggable`钩子来处理拖拽结束事件,并根据拖拽元素的新位置更新列表数据。

请注意,`dnd-kit`提供了高度可定制的拖拽API,你可以根据需要进一步自定义拖拽行为和样式。

标签:dnd,const,排序功能,newItems,kit,active,拖拽
From: https://www.cnblogs.com/suducn/p/18303269

相关文章

  • AI学习 | 概念解释 + Scikit-learn 的简单情况
    一些机器学习概念解释点击查看代码*机器学习:是AI的一个子集,不用人类显式编程,让计算机通过算法自行学习和改进*监督学习:有数据、有标签,告诉机器什么是什么,让机器来学习输入和输出的映射关系。比如:分类和回归(预测)*非监督学习:有数据没有标签,让机器自己寻找规律。比如:聚类......
  • WebKit简介及工作流程
    目录WebKit的架构WebKit的工作流程工作流程示意图结论WebKit是一个开源的浏览器引擎,最初由苹果公司开发,用于其Safari浏览器。它被广泛应用于许多操作系统和平台中,包括macOS、iOS、Windows和Linux。WebKit的主要功能是将HTML、CSS和JavaScript转换成可以在网......
  • 【小白向】在conda-forge中下载cudatoolkit和cudnn报错
    由于直接condasearch没有想要的cudatoolkit版本(当前windows对应的tensorflow-gpu只能<2.11),所以换成conda-forge进行搜索,condainstallcudatoolkit==11.2.0后报错:ERRORconda.core.link:_execute(950):Anerroroccurredwhileinstallingpackage'conda-forge::cudatoolki......
  • JDK 8 之后可以使用更加简单的方法 Stream 流来实现排序功能
    //创建并初始化ListList<Person>list=newArrayList<Person>(){{add(newPerson(1,30,"张三"));add(newPerson(2,20,"李四"));add(newPerson(3,40,"王五"));}};......
  • C# Winform之propertyGrid控件分组后排序功能
    在WinForms的PropertyGrid控件中,你可以通过多种方式对属性进行排序,包括按类别(Category)排序以及按属性名称排序。默认情况下,PropertyGrid控件会根据[Category]和[DisplayName]属性装饰器对属性进行分组和排序。如果你想要自定义排序规则,你可以通过以下几种方法:使用......
  • 20 卡片 Form kit
    服务卡片   wigget form card都是卡片的意思是一种界面形式,服务直达,减少多次跳跃层级,属于扩展能力常常嵌入到其他应用和元服务中可以拉起页面与应用和元服务进行交互,目前只有桌面作为使用卡片有动态的和静态的一般使用动态的卡片三种行为事件router拉起页面和......
  • NVIDIA+CUDA Toolkit+Pytroch安装
    1NVIDIA驱动安装一般来说,驱动可以使用兼容的最新版本window安装https://www.nvidia.cn/geforce/drivers/2CUDAToolkit安装(1)CUDAToolkit版本要求win+R输入nvidia-smi查询可以安装CUDAToolkit版本,CUDAToolkit版本小一点没有关系(2)下载CUDAToolkit并直接运行安装h......
  • 使用Python和scikit-learn实现支持向量机(SVM)
            支持向量机(SupportVectorMachine,SVM)是一种强大的监督学习算法,广泛用于分类和回归问题。它能够有效处理线性和非线性数据,并在复杂数据集中表现出色。本文将介绍如何使用Python和scikit-learn库实现SVM,以及如何通过可视化不同参数设置来理解其工作原理。一、......
  • Scikit-learn 十大高级应用实例讲解
    前言由于这学期的课程项目中都或多或少的涉及到了对PythonScikit-learn库的使用,特别是当学到一些机器学习和数据挖掘算法的内容时,基本都会出现Scikit-learn这个库。由于平时都是赶学习进度,一致都没有对这个库做个详细的了解,只知道这个库"很强大",但具体到底能用在那些......
  • WPF Performance Suite, Microsoft Windows Performance Toolkit
    Copyfrom https://www.cnblogs.com/lindexi/p/12086719.htmlhttps://learn.microsoft.com/en-us/previous-versions/aa969767(v=vs.110) 1.Downloadurl:  https://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKPerformanceT......