精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

這個17k star的拖拽庫有點料

開發 前端
近期在工作中遇到了一個新的需求,該需求需要實現某個組件的拖拽,面對這個需求的第一個項目肯定是問問度娘和用最大同性交友網站進行搜索,最終皇天不負有心人,讓我找到了這個17k star的React拖拽庫——React DnD。

一、背景

近期在工作中遇到了一個新的需求,該需求需要實現某個組件的拖拽,面對這個需求的第一個項目肯定是問問度娘和用最大同性交友網站進行搜索,最終皇天不負有心人,讓我找到了這個17k star的React拖拽庫——React DnD。

二、簡單使用

1、安裝

npm install react-dnd -S // react-dnd包,其核心包
npm install react-dnd-html5-backend -S // 拖拽的底層實現所需要的庫

2、三個核心點

通過使用React DnD這個庫,我認為里面最有用的部分包含一個組件和兩個Hook API,它們分別是:

  • DndProvider組件
  • useDrag函數
  • useDrop函數

(1)DndProvider組件

如果想讓某一內容使用React DnD的能力,需要將該部分用DndProvider進行包裹,其接收參數如下所示:

  • backend:必填。一個React DnD后端。目前官方文檔有三個,分別為:react-dnd-html5-backend、react-dnd-touch-backend、react-dnd-test-backend,但是常用的還是react-dnd-html5-backend。
  • context:可選的。用于配置后端的后端上下文。這取決于后端實現。
  • options:可選的。用于配置后端的選項對象。這取決于后端實現。

下面來一起看看該組件的簡單使用:

import {DndProvider} from 'react-dnd';
import {HTML5Backend} from 'react-dnd-html5-backend';

function App() {
  return (
    <div className="App">
      <DndProvider backend={HTML5Backend}>
        此處將放拖拽相關內容
      </DndProvider>
    </div>
  );
}

export default App;

(2)useDrag函數

既然知道了整個操縱空間,接下來需要了解的就是從什么位置進行拖拽,該庫提供了useDrag hook API,該元素可以讓一個DOM元素實現拖拽效果。

參數:

spec:創建規范對象的規范對象或函數,其詳細內容如下所示:

type:

必須,是一個字符串或Symbol,只有drop和此值相同才可以進行放置;

item:

必須,用于描述被拖動的數據

previewOptions:

可選的,一個簡單對象,用于描述拖動預覽選項;

options:

可選的,一個簡單對象

end(item, monitor):

可選的,當拖拽停止,該函數被調用;

canDrag(monitor):

可選的,使用它指定當前是否允許拖動;

isDragging(monitor):

可選的,默認情況下,只有啟動拖動操作的拖動源才被視為拖動;

collect:

可選的,監聽功能。

返回值:

返回值是一個數組,數組內容分別為:

collected:一個對象,包含從collect函數收集的屬性,如果collect未定義函數,則返回一個空對象;drag:拖動器的連接器功能,必須附加到DOM的可拖動部分;dragPreview:用于拖動預覽的連接器功能,可以附加到DOM的預覽部分;

與拖動部分建立連接:

通過ref屬性,將drag或dragPreview綁定到拖拽源上。

下面一起來看看useDrag部分的使用

import {useDrag} from 'react-dnd';

const SourceBox = props => {
    const {children} = props;

    /**
     * 返回的參數
     * collected:一個對象,包含從collect函數收集的屬性,如果collect未定義函數,則返回一個空對象
     * drag:拖動器的連接器功能,必須附加到DOM的可拖動部分
     * dragPreview:用于拖動預覽的連接器功能,可以附加到DOM的預覽部分
     */
    const [collected, drag, dragPreview] = useDrag({
        // 只有drop和此值相同才可以進行放置
        type: 'box',
        // 描述要拖動的數據
        item: {
            detail: '我是可以拖動的數據!!!'
        },
        // 拖動停止的手end將會被調用
        end: (item, monitor) => {
            // getDropResult()獲取釋放后的結果
            console.log('monitor.getDropResult():', monitor.getDropResult());
            // source是否已經drop在target
            console.log('monitor.didDrop()', monitor.didDrop());
        },
        // 指定當前是否允許拖動,默認允許
        canDrag: monitor => {
            return true;
        },
        // 監聽功能
        collect: (monitor, props) => {
            return {
                isDragging: monitor.isDragging()
            };
        }
    });
    return (
        <div ref={drag}>
            {children}
        </div>
    );
};

export default SourceBox;

(3)useDrop函數

為了將內容放置到目標位置,提供了useDrop函數,如下所示:

參數:

spec:創建規范對象的規范對象或函數,其詳細內容如下所示:

accept:

必須,一個字符串,此放置目標將僅對于指定類型的拖動源產生的項目作出反應。

options:

可選的,一個普通的對象。

drop(item,monitor):

可選的,當兼容項目放在目標時被調用。

hover(item,monitor):

可選的,將項目懸停在組件時調用。

canDrop(item,monitor):

可選的,用它來指定放置目標是否接受該拖拽內容。

collect:

可選的,監聽功能。

返回值:

返回值是一個數組,數組內容分別為:

collected:一個對象,包含從collect函數收集的屬性,如果collect未定義函數,則返回一個空對象;drop:一個用于放置目標的連接器函數,必須附加到DOM的放置部分;

與放置部分建立連接:

通過ref屬性,將drop與放置部分建立連接。

下面一起來看看useDrop部分的使用

import {useDrop} from "react-dnd";

const TargetBox = () => {
    const [collected, drop] = useDrop({
        //  此放置目標將僅對于指定類型的拖動源產生的項目作出反應
        accept: 'box',
        // 當兼容項目放在目標時調用
        drop: (item, monitor) => {
            console.log('我已經被放到目標!!!')
        },
        // 監聽功能
        collect: monitor => {
            return {
                // 是否重疊
                isOver: monitor.isOver(),
                // 是否可以放置
                canDrop: monitor.canDrop(),
                item: monitor.getItem(),
                didDrop: monitor.didDrop()
            };
        }
    });

    return (
        <div ref={drop}>
            <div className="targetBox">
                這是放置的區塊
            </div>
        </div>
    );
};

export default TargetBox;

3、monitor詳細內容

useDrag和useDrop上掛載了很多選項,這些選項中很多存在monitor對象,該對象上掛載了很多方法,下面就簡要概述幾個主要方法,如下所示:

drag上的monitor上的方法:

drop上的monitor上的方法:

三、效果圖

拖拽前:

拖拽中:

拖拽中拖拽的內容跟隨鼠標移動。

拖拽后:

拖拽釋放鼠標后,一些內容被打印出來,打印的結果是先輸出drop中的內容再輸出end中的內容,所以我們想做一些處理最后在SourceBox中進行處理,如果在drop中改變React相關的數據會報錯。

四、學習感悟

這個庫的資料千篇一律,在使用過程中遇到了一些坑,接下來與各位老鐵分享一下這些坑,防止后續深陷其中。

  • end方法的調用時機晚于drop的調用時機,所以只有在end中做釋放后的數據處理才能保證系統的正確性,如果在drop中就更新state或React redux中數據,會引發錯誤;
  • item數據是從Drag到Drop之間的橋梁,在drag中定義的item數據可以通過monitor.getItem()獲取;
  • drop回調的返回值是從Drop到Drag之間的橋梁,在end中可以通過monitor.getDropResult()其返回值;
  • 一些掛載在monitor上的位置函數并不一定適用于所有的場景,需要引入DOM相關的位置操作。
責任編輯:姜華 來源: 前端點線面
相關推薦

2022-01-10 06:52:59

拖拽庫項目搜索

2025-06-17 15:28:03

智能體AI開源

2020-12-14 05:57:01

clipboard.Selection execCommand

2024-08-26 09:36:06

2022-02-10 20:09:24

Dubbo源碼Provider

2021-11-26 05:19:52

AI初創公司人工智能

2022-07-07 10:46:51

數據處理

2014-09-17 14:05:14

2022-02-28 16:19:17

數據孤島

2019-04-24 09:25:14

Python編程語言代碼

2020-12-31 10:47:03

開發Vuejs技術

2013-09-16 11:04:23

大數據大數據發展

2020-11-02 14:49:46

GitHub Java圖片

2021-03-09 08:00:13

設計秒殺TPS

2013-09-17 10:04:36

大數據西大荒

2013-01-06 12:57:23

2022-07-18 15:48:43

數據庫開源工具

2025-04-29 08:14:14

2022-07-27 09:00:26

前端拖拽排序庫

2020-08-26 08:09:21

廁所物聯網IOT
點贊
收藏

51CTO技術棧公眾號

久久久999免费视频| 国产精品 日韩| 日本黄色录像片| 日本中文字幕免费观看| 亚洲ab电影| 欧美日韩久久久一区| 国产精品久久久影院| 日韩福利一区二区| 欧美成人精品| 日韩精品高清在线观看| 日韩av卡一卡二| 国内精品一区视频| 国产麻豆日韩欧美久久| 欧美最猛性xxxx| 国模私拍在线观看| 欧洲成人一区| 亚洲成人av一区二区三区| 日韩欧美亚洲日产国| 国产成人精品一区二三区| 深夜福利一区| 91国产福利在线| 日本高清不卡一区二区三| 国产免费福利视频| 美女黄网久久| 欧美黑人又粗大| 波多野结衣喷潮| 怕怕欧美视频免费大全| 欧美日韩中文字幕综合视频| 影音先锋欧美在线| 免费人成黄页在线观看忧物| 成人综合婷婷国产精品久久| 国产精品678| 国产视频91在线| 欧美日韩国产高清| 久久精品国产视频| 想看黄色一级片| 免费日韩电影| 亚洲不卡一区二区三区| 福利在线小视频| 欧美成人高清在线| 日本一区二区三区免费乱视频 | 久久综合九色欧美狠狠| 精品毛片一区二区三区| 国产在线精品一区二区夜色 | 久久国产香蕉视频| 久久精品午夜| 欧洲成人在线视频| 一区二区三区福利视频| 亚洲东热激情| 亚洲精品自在久久| 欧美一级片黄色| 超碰97久久| 精品国产电影一区二区| 波多野结衣电影免费观看| 黄视频在线免费看| 久久你懂得1024| 久久99精品久久久久久三级| 亚洲欧美强伦一区二区| 丁香另类激情小说| 国产经典一区二区三区| 手机看片1024日韩| 成人app下载| 日本伊人精品一区二区三区介绍| 国产成人精品片| 免费亚洲网站| 欧美亚洲国产视频小说| 亚洲av中文无码乱人伦在线视色| 亚洲免费影院| 国产精品99免视看9| 无码人妻aⅴ一区二区三区有奶水| 亚洲欧美日韩国产| 国产va免费精品高清在线观看| 中文字幕免费在线观看视频| 久久久久久穴| 国产精品网站大全| 97成人免费视频| 国产盗摄女厕一区二区三区| 国产精品.com| 国产一区二区影视| 国产精品美女久久久久aⅴ | 亚洲精品一区二区口爆| 成人污视频在线观看| 久久久久久久久久久一区 | 一级片在线免费观看视频| 韩国av一区二区三区| 99视频免费观看| 日本在线视频1区| 国产精品久久久久久久久果冻传媒| 亚洲AV无码成人精品一区| 色噜噜狠狠狠综合欧洲色8| 精品欧美激情精品一区| 亚洲不卡视频在线| 日韩成人视屏| 国产一区二区三区18| 青娱乐国产在线| 久久国产欧美| 99re在线视频观看| av片在线免费观看| 一区二区三区在线观看视频 | 麻豆国产尤物av尤物在线观看| 99精品国产在热久久婷婷| 国产精品久久久久7777婷婷| 国产精品白浆一区二小说| 老鸭窝毛片一区二区三区| 成人深夜直播免费观看| 欧美zzoo| 亚洲精品日日夜夜| 妞干网在线免费视频| 精品国产三级| 亚洲午夜小视频| 国产一级aa大片毛片| 美国十次了思思久久精品导航 | 色一情一区二区| 国产精品99久久免费观看| 色系列之999| av大全在线观看| 国产不卡免费视频| 一区在线电影| 欧美日韩国产网站| 日韩国产欧美精品一区二区三区| 婷婷激情四射网| 日韩黄色片在线观看| 国产日韩欧美精品| a毛片在线观看| 欧美日韩国产色站一区二区三区| 久久精品女同亚洲女同13| 久久精品国内一区二区三区水蜜桃| 欧美一级高清免费播放| 亚洲av无码国产精品久久不卡 | 日韩久久免费视频| 久久精品国产亚洲av麻豆| 综合激情视频| 国产日韩欧美视频在线| 国产在线一在线二| 欧美日韩精品中文字幕| 亚洲欧美综合视频| 午夜精品网站| 亚洲一区美女视频在线观看免费| 成人一区二区不卡免费| 日韩欧美亚洲综合| 亚洲欧美日本一区| 亚洲精品系列| 国产欧美日韩亚洲| 91破解版在线观看| 欧美va日韩va| 色婷婷在线影院| 久久日文中文字幕乱码| 欧美综合国产精品久久丁香| 色网站免费观看| 性久久久久久久久久久久| 亚洲成a人无码| 精品1区2区3区4区| 色欲av永久无码精品无码蜜桃| 久久成人在线| 精品国产一区二区三区四区vr| 日本在线观看高清完整版| 欧美一级艳片视频免费观看| h色网站在线观看| 日韩综合在线| 国产主播在线一区| 欧美三级黄网| 日韩午夜激情视频| 国产一级视频在线播放| 北条麻妃国产九九精品视频| 精品这里只有精品| 免费看av成人| 国产欧美日韩高清| www久久日com| 亚洲精品美女网站| 国产91精品看黄网站在线观看| 久久久久久久电影| 色乱码一区二区三区在线| 一区二区电影| 国产美女在线精品免费观看| 国模套图日韩精品一区二区| 中文字幕日韩专区| 精品国产一级片| 偷拍亚洲欧洲综合| 国产综合精品久久久久成人av| 精品一区二区日韩| 久久手机在线视频| 电影亚洲一区| 久久国产精品久久久| 丰满肉嫩西川结衣av| 精品久久久久久亚洲国产300| 熟女俱乐部一区二区视频在线| 蜜桃av一区二区| 欧美人与动牲交xxxxbbbb| 农村少妇一区二区三区四区五区| 国产成人一区二| 超碰免费公开在线| 国产婷婷成人久久av免费高清| 国产精品午夜一区二区| 夜夜嗨av一区二区三区网页 | 国产精品1区在线| 91极品女神在线| 日本在线人成| 亚洲国产天堂久久综合网| 中文字幕在线观看第二页| 亚洲一区视频在线观看视频| 国产123在线| 成人妖精视频yjsp地址| 国产 porn| 亚洲激情黄色| 五月天男人天堂| 亚洲自拍电影| 国产一区二区黄色| 男女啪啪999亚洲精品| 97碰碰碰免费色视频| 亚洲春色一区二区三区| 色诱亚洲精品久久久久久| 亚洲欧美一区二区三区四区五区| 国内精品第一页| 91免费视频网站在线观看| 午夜精品网站| 自拍偷拍99| 国内成人精品| 国产欧美一区二区三区在线看| 丁香花在线影院| 久久精品99久久香蕉国产色戒| 三级在线电影| 亚洲国产精品va| 亚洲日本韩国在线| 一区二区三区在线观看国产| 小嫩苞一区二区三区| 国产亚洲欧美激情| 青青草视频成人| 成人国产精品免费网站| 亚洲成人激情小说| 国产综合色在线| 亚洲图色中文字幕| 日本vs亚洲vs韩国一区三区二区| 漂亮人妻被中出中文字幕| 黄色亚洲大片免费在线观看| 天堂а√在线中文在线| 亚洲成av人片一区二区密柚| 一本色道久久99精品综合| 精品大片一区二区| 日本在线视频一区| 国产免费久久| 日产精品久久久一区二区| 色爱av综合网| 蜜桃视频在线观看成人| 欧美美女黄色| 久久偷看各类wc女厕嘘嘘偷窃| 国产成人高清精品免费5388| 成人看片在线| 国产suv精品一区二区四区视频| 99中文字幕| 99这里只有精品视频| 国产v亚洲v天堂无码| 亚洲啊v在线免费视频| 不卡一区二区三区视频| jizz久久精品永久免费| 成人久久久久爱| 日韩一区二区三区精品视频第3页| 91青青草免费在线看| av动漫精品一区二区| 久久国产精品亚洲va麻豆| 亚洲v天堂v手机在线| 秋霞久久久久久一区二区| 精品一区二区三| 亚洲一区二区三区乱码| 一区二区日韩欧美| 免费在线黄网站| 亚洲激情婷婷| 亚洲精品高清无码视频| 蜜桃av一区二区| 制服.丝袜.亚洲.中文.综合懂| k8久久久一区二区三区| 国产三级av在线播放| 国产精品久久久久久久久快鸭| 91免费公开视频| 亚洲成人av资源| 成人小视频在线播放| 欧美精品精品一区| 韩国av永久免费| 在线成人激情视频| 一色桃子av在线| 97久久精品人人澡人人爽缅北| 成人看片在线观看| 亚洲a区在线视频| 日韩av系列| 一区二区三区不卡在线| 精品二区久久| 性欧美videossex精品| 亚洲美女少妇无套啪啪呻吟| 国产性xxxx18免费观看视频| 老司机精品视频导航| www.美色吧.com| 国产欧美日韩视频在线观看| 中文字幕手机在线观看| 日韩欧美亚洲一二三区| 999精品国产| 亚洲人成电影网站色…| 91精品久久久| 日本久久亚洲电影| 在这里有精品| 性刺激综合网| 亚洲看片一区| 美女在线视频一区二区| 99热精品一区二区| fc2ppv在线播放| 一本到一区二区三区| 精品国产av一区二区| 一区二区三区亚洲| 极品av在线| 99久久伊人精品影院| 大片网站久久| 亚洲色欲综合一区二区三区| 国产成人精品免费看| 免费看的黄色录像| 一本色道久久综合亚洲91| 丰满人妻一区二区三区免费| 久久精品国亚洲| 亚洲第一会所001| 久久久久久亚洲精品不卡4k岛国| 中文字幕人成人乱码| 黄色手机在线视频| 久久人人超碰精品| 国产九色在线播放九色| 精品久久国产老人久久综合| 欧美成人视屏| 国产精品色悠悠| 国产一区三区在线播放| 精品少妇一区二区三区在线| 国产成人精品综合在线观看| 国产又黄又粗又猛又爽的| 91极品视觉盛宴| 蜜芽tv福利在线视频| 欧美一区二区三区四区在线| 9999久久久久| 一卡二卡三卡视频| 成人黄色777网| 日本免费观看视| 亚洲成avwww人| 国内老司机av在线| 国产98在线|日韩| 狠色狠色综合久久| 成人在线观看一区二区| 一区二区三区色| 亚洲国产日韩在线观看| 久久99久久久久久久噜噜| 秋霞影院一区| 中文字幕色呦呦| 国产成人综合在线| 国产一级视频在线播放| 亚洲国产欧美一区二区三区久久| 韩国日本一区| 国产一区二区久久久| 免费在线播放第一区高清av| www.久久国产| 一本在线高清不卡dvd| 风间由美一区| 成人福利视频网| 久久久国产精品| 色诱av手机版| 欧美日韩精品二区| 国产一区二区影视| 成人精品视频99在线观看免费 | 99国产一区二区三精品乱码| 亚洲精品视频在线观看免费视频| 日韩电影第一页| 97成人超碰| 免费的av在线| av成人免费在线观看| 国产伦精品一区二区三区视频我 | 91香蕉在线观看| 国产精品久久亚洲| 欧美综合国产| 国产人与禽zoz0性伦| 日韩精品一区二区三区三区免费| 亚洲 国产 欧美 日韩| 青青在线视频一区二区三区| 精品久久中文| 性色av浪潮av| 精品国产91久久久| 爱爱爱免费视频在线观看| 91探花福利精品国产自产在线| 激情视频一区二区三区| 美女脱光内衣内裤| 欧美一区二区免费视频| 黄色aa久久| 一区二区三区四区欧美| 成人国产精品免费网站| 国产免费a视频| 久久6精品影院| 国产一区网站| 国产xxx在线观看| 在线观看免费成人| 日本在线观看高清完整版| 蜜桃av噜噜一区二区三| 精品无人区卡一卡二卡三乱码免费卡| 免费一级a毛片夜夜看 | 久久久久亚洲av成人无码电影| 在线不卡一区二区| 欧美日韩电影免费看| 日韩精品免费一区| 欧美激情中文不卡| 五月婷婷丁香六月|