首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在React中使用带有Beautiful DND的`useState`

,可以实现拖拽和重新排序的功能。Beautiful DND是一个用于实现拖拽和重新排序的React库。

首先,我们需要安装Beautiful DND库。可以使用以下命令进行安装:

代码语言:txt
复制
npm install react-beautiful-dnd

安装完成后,我们可以在React组件中引入Beautiful DND的相关组件和钩子函数。首先,引入DragDropContextDroppableDraggable组件:

代码语言:txt
复制
import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';

接下来,我们可以使用useState钩子函数来创建一个状态变量,用于存储拖拽元素的顺序。假设我们有一个包含多个项目的列表,每个项目都可以拖拽重新排序。我们可以使用useState来创建一个名为items的状态变量:

代码语言:txt
复制
const [items, setItems] = useState([
  { id: 'item-1', content: 'Item 1' },
  { id: 'item-2', content: 'Item 2' },
  { id: 'item-3', content: 'Item 3' },
]);

接下来,我们需要实现拖拽和重新排序的逻辑。我们可以使用onDragEnd事件处理函数来处理拖拽结束的事件。在该事件处理函数中,我们可以获取拖拽元素的起始索引和目标索引,并更新items状态变量的顺序:

代码语言:txt
复制
const onDragEnd = (result) => {
  if (!result.destination) {
    return;
  }

  const startIndex = result.source.index;
  const endIndex = result.destination.index;

  const updatedItems = Array.from(items);
  const [removed] = updatedItems.splice(startIndex, 1);
  updatedItems.splice(endIndex, 0, removed);

  setItems(updatedItems);
};

最后,我们可以在组件的JSX中使用DragDropContextDroppableDraggable组件来实现拖拽和重新排序的效果。我们需要将onDragEnd事件处理函数传递给DragDropContext组件,并在DroppableDraggable组件中使用items状态变量来渲染列表项:

代码语言:txt
复制
<DragDropContext onDragEnd={onDragEnd}>
  <Droppable droppableId="items">
    {(provided) => (
      <ul {...provided.droppableProps} ref={provided.innerRef}>
        {items.map((item, index) => (
          <Draggable key={item.id} draggableId={item.id} index={index}>
            {(provided) => (
              <li
                {...provided.draggableProps}
                {...provided.dragHandleProps}
                ref={provided.innerRef}
              >
                {item.content}
              </li>
            )}
          </Draggable>
        ))}
        {provided.placeholder}
      </ul>
    )}
  </Droppable>
</DragDropContext>

以上就是在React中使用带有Beautiful DND的useState来实现拖拽和重新排序的完整流程。通过使用Beautiful DND库,我们可以轻松地为React应用程序添加拖拽和重新排序的功能。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅为示例,具体的产品选择应根据实际需求和情况进行评估和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

有趣拖放案例

最流行几个是:react-beautiful-dnd 脱颖而出,是最常用,它提供了一个干净且高级API,具有很多抽象。它是由Atlassian开发。...问题**epilot,我们应用程序不同部分广泛使用react-beautiful-dnd。然而,尝试一些复杂场景时,我们某些情境遇到了一些障碍,它无法准确预测元素放置位置。...react-beautiful-dnd停止维护和支持也不利于继续使用理由。解决方案最终,我们决定探索能够以更明确、直观和简单API解决问题替代库。...react-beautiful-dnd实现这一点可能会很具有挑战性,因为它将具有有限功能并且需要大量JavaScript来达到令人满意状态。...我们场景,我们希望拖动期间显示元素及其子元素精简版本,因此我们使用带有React portalDragOverlay。

25400

reactuseState源码分析

本人曾经hooks出来前负责过纯函数式react项目,所有状态处理都必须在reducer中进行,所有副作用都在saga执行,可以说是十分艰辛经历了。...hooks出来后我公司一个小台项目中使用,落地效果不错,代码量显著减少同时提升了代码可读性。...useStateReact是怎么实现Hooks take some getting used to — and especially at the boundary of imperative and...;return children;useState构建时流程mountStateHooksDispatcherOnMountuseState调用是下面的mountState,作用是创建一个新hook...reducer而是将action存入updateupdateState再执行,但是如果在react没有重渲染需求前提下是会提前计算state即eagerState。

47440
  • 【前端拖拽组件库】最强开源高性能组件库Pragmatic-drag-and-drop简介与分析

    :用于添加常见辅助功能控件自定义组件Live-Region:向屏幕阅读器用户发送消息助手react-beautiful-dnd-migration:支持从 react-beautiful-dnd 到...,移动端,Pragmatic-drag-and-drop比react-beatiful-dnd快了进275ms,比react-dnd更是快了287ms,用时6ms;桌面端,Pragmatic-drag-and-drop...比react-beatiful-dnd快了进180ms,比react-dnd是快了166ms,用时1ms;服务端渲染时,Pragmatic-drag-and-drop比react-beatiful-dnd...小了7.5倍,代码块也是最小,比react-beatiful-dnd减少了26%,再次体现了它实用性,非常方便前端开发同学们使用,可谓是非常友好。...'lightgrey' : 'white';}3.移动棋子最后实现棋子掉落时移动方块,我们将使用monitorForElements实用拖放功能。监视器允许从代码库任何位置观察拖放交互。

    2.5K21

    React源码useState,useReducer

    答案是,记录在函数组件对应fiber节点中。两套hooks我们刚开始学习使用hooks时,可能会有疑惑, 为什么hooks要在函数组件顶部声明,而不能在条件语句或内部函数声明?...答案是,React维护了两套hooks,一套用来项目初始化mount时,初始化hooks。而在后续更新操作中会基于初始化hooks执行更新操作。...前面讲过,React维护了两套hooks,一套用于初始化, 一套用于更新。 这个调度更新时就已经完成了切换。所以我们这次调用useState方法会和之前初始化有所不同。...原来useState更新调用就是updateReducer啊。updateReducer本来很长,想让各位看官忍一忍。...当更新过程再次执行函数组件,也会调用useState方法,此时useState内部会使用更新时hooks。

    1K30

    React useState 和 setState 执行机制

    React useState 和 setState 执行机制 useState 和 setState React开发过程 使用很频繁,但很多人都停留在简单使用阶段,并没有正在了解它们执行机制...setState和 useState「合成事件」如onClick等和「钩子函数」包括componentDidMount、useEffect等是“异步”原生事件和 setTimeout、Promise.resolve...这里“异步”并不是说内部由异步代码实现,其实本身执行过程和代码都是同步,只是「合成事件」和「钩子函数」调用顺序更新之前,导致合成事件和钩子函数没法立马拿到更新后值,形式了所谓“异步”。...「批量更新优化」也是建立“异步”(合成事件、钩子函数)之上原生事件和setTimeout、Promise.resolve().then 不会批量更新,“异步”如果对同一个值进行多次修改,批量更新策略会对其进行覆盖...假如在一个「合成事件」,循环调用了setState方法n次,如果 React 没有优化,当前组件就要被渲染n次,这对性能来说是很大浪费。

    3.1K20

    前端10大开源拖拽排序库汇总, 让搭建,更简单

    」 是一组 「React」 高阶组件,使用时候只需要使用对应 「API」 将目标组件进行包裹,即可实现拖动或接受拖动元素功能。...有很多库允许React拖放交互. 其中最值得注意是惊人react-dnd」. 它提供了一套非常出色拖放函数,这些函数特定情况下非常适用疯狂地不一致html5拖放功能....「react-beautiful-dnd」 是为垂直和水平列表专门构建更高级别的抽象. 该功能子集内「react-beautiful-dnd」提供强大,自然和美丽拖放体验....「github:」 https://github.com/atlassian/react-beautiful-dnd 「demo地址:」 https://react-beautiful-dnd.netlify.app...Formily React 受控模式下,表单整树渲染问题非常明显。

    5.9K21

    整理了12款开源拖拽库, 轻松上手可视化搭建

    」 是一组 「React」 高阶组件,使用时候只需要使用对应 「API」 将目标组件进行包裹,即可实现拖动或接受拖动元素功能。...有很多库允许React拖放交互. 其中最值得注意是惊人react-dnd」. 它提供了一套非常出色拖放函数,这些函数特定情况下非常适用疯狂地不一致html5拖放功能....「react-beautiful-dnd」 是为垂直和水平列表专门构建更高级别的抽象. 该功能子集内「react-beautiful-dnd」提供强大,自然和美丽拖放体验....「github:」 https://github.com/atlassian/react-beautiful-dnd 「demo地址:」 https://react-beautiful-dnd.netlify.app...Formily React 受控模式下,表单整树渲染问题非常明显。

    1.4K20

    react-dnd使用总结一】拖放完成后获取放置元素drop容器相对位置

    工具函数-根据元素起始位置和最终位置,计算相对于某元素位置 export interface IPosition { left: number; top: number; } /** *...根据元素其实位置和最终位置,计算相对于某元素位置 * @param initialPosition 拖动元素相对于屏幕左上角起始位置(偏移量) * @param finalPosition 拖放完成后当前节点相对于屏幕左上角位置...initialPosition: any, finalPosition: any, containerEle: HTMLDivElement, ): IPosition => { // 获取容器位置信息...finalX) - dropTargetPosition.left; return { left: newXposition, top: newYposition, }; }; drop...回调函数 drop(target: any, monitor: DropTargetMonitor) { console.log(target, monitor); const position

    4.2K10

    回望过去,展望未来- 2024 React 生态一览表

    Tailwind CSS 使用实用类情况下在 UI 开发中表现出色。 Styled Components 和 Emotion 非常适合 React 应用程序组件级样式。 8....(待写清单,其实有一篇关于draggable内容,等哪天总结一下,给大家分享出来) 解决方案 DND Kit[37] 用于拖放功能 DND Kit 是一个功能强大库,用于为我们 React...它提供了一种简单且可定制方式来实现重新排序、重新排列或组织用户界面元素拖放功能。 react-dnd[38]这是一个老牌Dnd库。...react-draggable[39]也是成名已久Dnd库。 react-beautiful-dnd[40]专注于List拖拽解决方案 15..../react-draggable [40] react-beautiful-dnd: https://github.com/atlassian/react-beautiful-dnd [41] React

    68810

    关于react-dnd,看这一篇就够了

    概念 React DnD 是一组 React 高阶组件,使用时候只需要使用对应 API 将目标组件进行包裹,即可实现拖动或接受拖动元素功能。...拖动过程,不需要开发者自己判断拖动状态,只需要在传入 spec 对象各个状态属性做对应处理即可,因为react-dnd使用了redux管理自身内部状态。...值得注意是,react-dnd并不会改变页面的视图,它只会改变页面元素数据流向,因此它所提供拖拽效果并不是很炫酷,我们可能需要写额外视图层来完成想要效果,但是这种拖拽管理方式非常通用,可以在任何场景下使用...DndProvider 如果想要使用 React DnD,首先需要在外层元素上加一个 DndProvider。...它是 DnD Dom 层实现。

    17.8K42

    20个惊艳React组件库,每一个都值得收藏(上)

    https://github.com/react-grid-layout/react-grid-layout 2、React Beautiful DND:让拖拽体验更加美观流畅 现代网页设计,拖拽功能不仅仅是一种交互方式...React Beautiful DND(Drag and Drop)是一个专门为React开发库,旨在提供一个美观、流畅拖拽体验。...通过精心设计动画和反馈效果,它确保用户操作感觉既流畅又自然。 易于使用React Beautiful DND提供了一个简单而强大API,使得实现复杂拖拽逻辑变得简单。...npm install react-beautiful-dnd # 或者 yarn add react-beautiful-dnd https://github.com/atlassian/react-beautiful-dnd...丰富样式选择:提供多种内置样式,也支持自定义样式,满足不同设计需求。 易于使用:通过简单组件封装,可以轻松地React组件引入和使用,实现代码高亮显示。

    1.2K12

    React Native优雅使用iconfont

    React Nativeiconfont 关于React Native中使用iconfont,网上已有很多非常好解决方案,用最多就是react-native-vector-icons , 这个库支持很多常用...IconFont使用原理 其实IconFont就是一些文字,通过web上使用,我们可以大概猜出使用方法: 指定字体集 把对应16进制码当成文字写到文本 React Native同样如此,我们可以通过...实际上,一个字体通常由数个表(table)构成,字体信息存储。...这里最好给每个icon定一个易于理解名字,可以使用http://font.baidu.com/editor 使用自定义IconFont 有了上面的摸索,要支持自己IconFont并不难。...tag-svip:{icon('tag-svip')} ) } } 另外,工程

    15.2K40

    推荐 8 个很棒 React 工具库,强烈建议收藏~

    俗话说好 工欲善其事,必先利其器。笔者开发 React 项目的时候,总结出一些很不错 React 库,可以提高开发效率,满足业务需求,接下来将一一介绍它们。...6.jpg 状态管理工具 Dvajs Dvajs 是基于 redux , react-redux ,redux-saga 状态管理工具, dva ,同步触发 reducers ,异步触发 effects...9.jpg 拖拽库 React dnd React dndReact 一个推拽库,用起来还是比较得心应手react-dnd github 上得到了 16.4k+ star。...可视化图表 echarts-for-react echarts-for-react使用 React 基于 echarts 封装图表库,能够满足基本可视化图表需求。...这个插件是笔者开发,主要是用于一些 React 需要缓存页面的需求,这里推广一下,目前 github 上获得 519颗 。

    1.1K10

    前端里拖拖拽拽了解一下?

    最近在项目中使用react-dnd[1],一个基于 HTML5 拖拽库,“拖拽能力”丰富了前端交互方式,基于拖拽能力,会扩展各种各样拖拽反馈效果,因此有必要学习了解,最好学习方式就是实操!...“拖拽”使用!...三、已有拖拽库 目前主流拖拽库有: react-dnd: https://github.com/react-dnd/react-dnd/ react-beautiful-dnd: https://github.com.../atlassian/react-beautiful-dnd/ sortablejs: https://sortablejs.github.io/Sortable/ react-sortable-hoc...,从可扩展和兼容性上考虑,最终选择了 react-dnd 作为基础拖拽库,当然,复杂拖拽场景下,是需要自行扩展该拖拽库,上手难度相对会高一点,不过有了这些“拖拽知识”作为前置基础,那么扩展功能也就不是什么难事了

    4.9K30

    React进阶」 推荐 8 个很棒 React 工具库,强烈建议收藏~

    俗话说好 工欲善其事,必先利其器。笔者开发 React 项目的时候,总结出一些很不错 React 库,可以提高开发效率,满足业务需求,接下来将一一介绍它们。...6.jpg 状态管理工具 Dvajs Dvajs 是基于 redux , react-redux ,redux-saga 状态管理工具, dva ,同步触发 reducers ,异步触发 effects...9.jpg 拖拽库 React dnd React dndReact 一个推拽库,用起来还是比较得心应手react-dnd github 上得到了 16.4k+ star。...可视化图表 echarts-for-react echarts-for-react使用 React 基于 echarts 封装图表库,能够满足基本可视化图表需求。...这个插件是笔者开发,主要是用于一些 React 需要缓存页面的需求,这里推广一下,目前 github 上获得 519颗 。

    1.4K20

    有点意思gif动图生成平台开发实战(二)

    接下来我们看看主要要实现功能点: 纯前端实现图片上传和预览 基于react-beautiful-dnd实现元素自由拖动排序 使用javascript实现生成uuid函数 使用file-saver实现前端下载文件...: 代码我们将图片数据存储到一个对象里, 对象包括由uuid函数生成唯一id和url组成, 至于为何生成唯一id...使用react-beautiful-dnd实现元素自由拖动排序 大家研究过H5-Dooring | 一款强大开源H5编辑器 后就会发现react-dnd这个模块很熟悉, 因为该开源编辑器就使用react-dnd...笔者社区又发现了一个比较有意思拖拽库react-beautiful-dnd, 同样可以实现优雅平滑智能拖拽效果, 基本案例如下: 深入研究该库之后笔者发现可以直接用来实现图片组件拖拽并排序功能...使用file-saver实现前端下载文件 我们只需要把生成gif图片, 传递给file-saver模块, 使用其提供API即可下载文件, 这里之前文章笔者也介绍过了, 这里直接上代码: import

    1.1K10
    领券