半岛bandao体育(中国)官方网站

BOB半岛娱乐:这个星星的React拖拽库真的很给力,我们一起来学习一下吧。最近工作中遇到一个新的需求,需要实现一个组件的拖拽功能。面对这个需求,首先我向度娘请教并在同性交友网站上进行搜索,最终幸运地找到了这个星级为17k的React拖拽库——React DnD。

日期:2024-06-24 10:12 / 作者:zoc7RcITctunhMtq7EzA

第二、简单使用 \n2.1 安装 npm install react-dnd -S // react-dnd包,核心库 npm install react-dnd-html5-backend -S // 拖放的基础实现库 

\n2.2 三个关键要点
使用React DnD库,我认为最实用的部分是包含一个组件和两个Hook API。它们分别是:
DndProvider元件 useDrag功能 useDrop功能

2.2.1 DndProvider元件

若要让某一内容具备React DnD的功能,必须使用DndProvider进行封装,其参数如下:

后端:必须。一个用React实现的后端。React DnD框架中的后端。目前官方文档提供了三种选择,分别是:react-dnd-html5-backend、react-dnd-touch-backend、react-dnd-test-backend,但最常使用的是react-dnd-html5-backend。 context:可选的。用于配置后端的后端上下文。这由后端来决定。 个选择:可供选择的。用来设置后端的选项对象。这要看后端是如何实现的。以下是组件的简单使用示例:\n```javascript\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nfunction App(){\n return (\n
\n \n {/* 在这里放置拖拽相关内容 */}\n \n
\n );\ \nexport default App;\n```\n2.2.2 useDrag函数用于操作整个拖拽空间。下一步需要了解的是在哪个位置开始拖动,这个库提供了useDrag hook API,它可以让一个DOM元素实现拖动效果。{id}{e} 参{数}{i}哈{sh}{表}对{象}是创{建}规范对{象}或函{数}的特{定}说{明}如下:{1)}类{型}是必{需}的,必{须}是一{个}字符{串}或符号,只有{与}drop相{同}方{能}放{置};{2)}项是必{需}的,用于描{述}被拖{动}的数{据};{3)}预览{选}项是{可}选的,一{个}简{单}对{象},用于描{述}拖{动}{预}览选{项};{4)}选{项}是{可}选的,一{个}简{单}对{象};{5)}结{束}(项,监{控})是{可}选的,当拖{拽}停{止},当函数被调用时; 6)可以拖拽(monitor)选项,使用它来指定当前是否可以拖动; 7)正在拖动(monitor)选项,默认情况下,只有启动拖动操作的拖动源才被视为正在拖动; 8)搜集(collect)选项,监听功能返回值是一个数组,数组内容包括:搜集到的:一个对象,包含从搜集函数中搜集的属性,如果搜集函数未被定义,则返回一个空对象;拖拽:连接器的拖拽功能。必须将可拖动的元素附加到DOM;dragPreview是一个用于拖动预览的连接器功能,可以将其附加到DOM中的预览元素;通过ref属性,将drag或dragPreview与拖动源建立连接。

让我们一起来看看useDrag部分的使用方法吧!

\n从'react-dnd'中导入 useDrag 。\n定义SourceBox组件并传入 props 参数: const SourceBox = (props) => { \n{childre  变量存储在 rops}中; \n/** \n返回的参数: \ncollected是一个对象,包含从collect函数中收集的属性,若collect函数未定义,返回空对象:如果需要,可以添加拖动器连接功能到DOM的可拖动部分;dragPreview:添加拖动预览功能至DOM的预览部分;常量[collected,drag, dragPreview] = useDrag({         // 只有与drop相同才可放置         type: 'box',         // 描述拖动的数据类型         item: {             detail: '我是可拖动的数据!!!!拖动结束后,将会触发调用end方法,参数有(item, monitor) => { // 获取释放后的结果 console.log('monitor.getDropResult():', monitor.getDropResult()); }monitor.getDropResult()    // 源是否已经在目标处释放    console.log('monitor.didDrop()', monitor.didDrop());   // 指示当前是否允许拖放。默认情况下允许拖动功能。 监听器=>{{return true;}}, // 监听功能,采集:(monitor, props) => {             return {              isDragging: monitor.isDragging()             };         }     });     return (         <div ref={drag}>             {childre          </div>     ); };  输出 default SourceBox; 
2.2.3 使用useDrop函数

以便将内容放置到目标位置,提供了useDrop函数,代码如下所示:

参数

如下所示:

1) spec:创建规范对象或函数,具体如下:

BOB半岛入口

1)accept

为必填项,一个字符串,放置目标只对指定类型的拖动源产生的项目作出反应;

2)options

为可选项,一个普通对象;

3)drop(item,monitor)

为可选项,当兼容项目放在目标时被调用;

4)hover(item,monitor)

为可选项,在悬停在组件时调用项目;\n可选,用于指定放置目标是否接受该拖拽内容;\n可选,监听功能,并返回结果;\n返回值为数组,包含以下内容:\ncollected:收集的属性对象,如果未定义,则为空对象;\ndrop:用于放置目标的连接器函数,需附加到DOM的放置部分;\n通过ref属性进行连接。让我们一起来看看useDrop部分的使用,导入useDrop模块自"react-dnd";\nconst TargetBox = () => {\n const [collected, drop] = useDrop({\n // 此放置目标将仅对于指定类型的拖动源产生的项目作出反应\n accept: 'box',在这种情况下,项目需具有兼容性。当把物品(item, monitor)放到目标时调用drop方法 => console.log('我已经被放到目标!') !!你好, 这是我修改过的文本: "{}         {}".         // 监视功能         收集: 监视器 => {            返回 {                // 检查是否叠加                是否叠加: monitor.isOver(),可以将文本改写为:                 // 是否允许投放                canDrop: monitor.canDrop(),                  item: monitor.getItem(),当调用monitor.didDrop()方法时,检测是否放置了元素。返回值为true代表已经放置。使用
来返回目标区域的HTML结构,这里是放置的区块。export默认的TargetBox组件会挂载很多选项到useDrag和useDrop上。这些选项中有许多包含monitor对象,该对象上有很多方法。以下简要概述几个主要方法,如下所示:\n1. drag对象上的monitor方法\n2. drop对象上的monitor方法\n3. 效果图\n拖拽前\n- 拖拽中\n - 拖拽中,拖拽的内容跟随鼠标移动\n- 拖拽后\n - 拖拽释放鼠标后,一些内容被打印出来。打印结果是先输出drop中的内容,再输出end中的内容。因此我们打算在SourceBox中最后进行一些处理,如果在拖放过程中改变React相关的数据,将会导致错误。

四、在学习过程中我对

这一资源有了一些心得体会。虽然资料都大同小异,但在实际运用中,我碰到了一些困难。接下来我将和大家分享这些经验,以防大家也掉进同样的陷阱。end方法的调用时间晚于drop方法,因此只有在end方法中释放数据后进行处理才能确保系统的正确性。如果在drop方法中更新state或者在React Redux中更新数据,将会引发错误;item数据是drag和drop之间的连接,可以通过monitor.getItem()方法获取;drop回调的返回值是drag和drop之间的桥梁,可以通过monitor.getDropResult()方法获取其返回值;有些挂载在monitor上的位置函数并非所有场景都适用。需要使用DOM来执行位置相关的操作。本文来自微信公众号“前端点线面”,可扫描以下二维码关注。本文内容来自微信公众号“前端点线面”,可以使用下方二维码进行关注。如需转载本文,请联系前端点线面公众号。

 

BOB半岛下载

BOB半岛娱乐

BOB半岛APP

这个星星的React拖拽库真的很给力,我们一起来学习一下吧。最近工作中遇到一个新的需求,需要实现一个组件的拖拽功能。面对这个需求,首先我向度娘请教并在同性交友网站上进行搜索,最终幸运地找到了这个星级为17k的React拖拽库——React DnD。

BOB半岛平台

BOB半岛新版


BOB半岛新版 BOB半岛下载