React庫(kù)之react-beautiful-dnd介紹及其使用過(guò)程
什么是react-beautiful-dnd
react-beautiful-dnd是一個(gè)用于實(shí)現(xiàn)強(qiáng)大而靈活的拖拽功能的React庫(kù)。它的設(shè)計(jì)思路是將拖拽功能分解為三個(gè)關(guān)鍵組件:DragDropContext、Droppable和Draggable。
1. DragDropContext(拖拽上下文)
DragDropContext是react-beautiful-dnd的核心組件之一,用于包裹整個(gè)拖拽區(qū)域。它負(fù)責(zé)管理拖拽的狀態(tài)和交互,并通過(guò)事件處理函數(shù)將拖拽的結(jié)果傳遞給其他組件。
import { DragDropContext } from 'react-beautiful-dnd';
<DragDropContext onDragEnd={onDragEnd}>
{/* ... */}
</DragDropContext>
在上面的代碼中,DragDropContext組件通過(guò)onDragEnd屬性指定了拖拽結(jié)束時(shí)的事件處理函數(shù)。
2. Droppable(可放置區(qū)域)
Droppable表示一個(gè)可以放置拖拽元素的區(qū)域。通過(guò)在Droppable組件上設(shè)置droppableId屬性來(lái)唯一標(biāo)識(shí)該區(qū)域。Droppable組件會(huì)將拖拽元素放置在其內(nèi)部,并提供一些屬性和回調(diào)函數(shù)供自定義。
import { Droppable } from 'react-beautiful-dnd';
<Droppable droppableId="sortable-list">
{(provided) => (
<ul
className="sortable-list"
{...provided.droppableProps}
ref={provided.innerRef}
>
{/* ... */}
</ul>
)}
</Droppable>
在上面的代碼中,我們創(chuàng)建了一個(gè)Droppable組件,通過(guò)droppableId屬性指定了可放置區(qū)域的標(biāo)識(shí)符。在返回的回調(diào)函數(shù)中,我們可以利用provided.droppableProps和provided.innerRef屬性來(lái)提供給Droppable組件的容器元素。
3. Draggable(可拖拽元素)
Draggable表示一個(gè)可拖拽的元素。通過(guò)設(shè)置draggableId屬性和index屬性來(lái)唯一標(biāo)識(shí)和排序拖拽元素。Draggable組件包裹在Droppable組件內(nèi)部,根據(jù)用戶的操作進(jìn)行位置變化,并提供一些屬性和回調(diào)函數(shù)供自定義。
import { Draggable } from 'react-beautiful-dnd';
const renderPageForm = (item, index) => {
const id = index;
return (
<Draggable key={id} draggableId={String(index + 1)} index={index}>
{(provided) => (
<li
className="drag-wrap"
{...provided.draggableProps}
ref={provided.innerRef}
>
{/* ... */}
</li>
)}
</Draggable>
);
};
在上面的代碼中,我們使用Draggable組件包裹了每個(gè)可拖拽元素。通過(guò)draggableId屬性和index屬性來(lái)唯一標(biāo)識(shí)和排序元素。在返回的回調(diào)函數(shù)中,我們可以利用provided.draggableProps和provided.innerRef屬性來(lái)提供給Draggable組件的元素。
實(shí)際應(yīng)用
下面我們將結(jié)合實(shí)際的代碼來(lái)一一詳細(xì)介紹如何使用react-beautiful-dnd來(lái)實(shí)現(xiàn)拖拽功能。
import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';
// DragDropContext包裹拖拽區(qū)域
<DragDropContext onDragEnd={onDragEnd}>
{/* Droppable組件表示可放置區(qū)域 */}
<Droppable droppableId="sortable-list">
{(provided) => (
<ul
className="sortable-list"
{...provided.droppableProps}
ref={provided.innerRef}
>
{pageList.map(renderPageForm)}
{provided.placeholder}
</ul>
)}
</Droppable>
</DragDropContext>
在上面的代碼中,我們通過(guò)DragDropContext組件將整個(gè)拖拽區(qū)域進(jìn)行包裹,并設(shè)置了onDragEnd事件處理函數(shù)來(lái)處理拖拽結(jié)果。在DragDropContext組件內(nèi)部,我們使用Droppable組件來(lái)表示一個(gè)可放置區(qū)域,通過(guò)droppableId屬性進(jìn)行唯一標(biāo)識(shí)。在返回Droppable組件的回調(diào)函數(shù)中,我們構(gòu)建了一個(gè)ul元素,通過(guò)provided.droppableProps和provided.innerRef屬性來(lái)提供給Droppable組件的容器元素。
const renderPageForm = (item, index) => {
const id = index;
return (
<Draggable key={id} draggableId={String(index + 1)} index={index}>
{(provided) => (
<li
className="drag-wrap"
{...provided.draggableProps}
ref={provided.innerRef}
>
{/* ... */}
</li>
)}
</Draggable>
);
};
在上面的代碼中,我們定義了一個(gè)函數(shù)renderPageForm,用于渲染單個(gè)可拖拽元素。在該函數(shù)中,我們使用Draggable組件來(lái)包裹每個(gè)可拖拽元素,并通過(guò)draggableId屬性和index屬性來(lái)唯一標(biāo)識(shí)和排序元素。在返回Draggable組件的回調(diào)函數(shù)中,我們構(gòu)建了一個(gè)li元素,通過(guò)provided.draggableProps和provided.innerRef屬性來(lái)提供給Draggable組件的元素。
以上就是React庫(kù)之react-beautiful-dnd介紹及其使用過(guò)程的詳細(xì)內(nèi)容,更多關(guān)于React庫(kù)react-beautiful-dnd的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React18之update流程從零實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了React18之update流程從零實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
React?Hook中的useEffecfa函數(shù)的使用小結(jié)
React 會(huì)在組件更新和卸載的時(shí)候執(zhí)行清除操作, 將上一次的監(jiān)聽(tīng)取消掉, 只留下當(dāng)前的監(jiān)聽(tīng),這篇文章主要介紹了React?Hook?useEffecfa函數(shù)的使用細(xì)節(jié)詳解,需要的朋友可以參考下2022-11-11
react實(shí)現(xiàn)頭部導(dǎo)航,選中狀態(tài)底部出現(xiàn)藍(lán)色條塊問(wèn)題
這篇文章主要介紹了react實(shí)現(xiàn)頭部導(dǎo)航,選中狀態(tài)底部出現(xiàn)藍(lán)色條塊問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
優(yōu)雅的在React項(xiàng)目中使用Redux的方法
這篇文章主要介紹了優(yōu)雅的在React項(xiàng)目中使用Redux的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
React-Hook中使用useEffect清除定時(shí)器的實(shí)現(xiàn)方法
這篇文章主要介紹了React-Hook中useEffect詳解(使用useEffect清除定時(shí)器),主要介紹了useEffect的功能以及使用方法,還有如何使用他清除定時(shí)器,需要的朋友可以參考下2022-11-11
詳解在React項(xiàng)目中安裝并使用Less(用法總結(jié))
這篇文章主要介紹了詳解在React項(xiàng)目中安裝并使用Less(用法總結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
使用webpack5從0到1搭建一個(gè)react項(xiàng)目的實(shí)現(xiàn)步驟
這篇文章主要介紹了使用webpack5從0到1搭建一個(gè)react項(xiàng)目的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

