摘要:不多說,直接上代碼需要版本貌似與方法有關(guān)類似的高階組件包裹被拖的元素高階組件包裹被釋放的元素這個(gè)庫(kù)是必須的,類似于的合成事件解決瀏覽器差異,抽象事件操作為可以處理的
不多說,直接上代碼
react-dnd 需要react版本 > 16.6 ,貌似與react.memo方法有關(guān)
import React from "react" // DragDropContext 類似React的Context // DragSource 高階組件 包裹被拖的元素 // DropTarget 高階組件 包裹被釋放的元素 import {DragDropContext, DragSource, DropTarget} from "react-dnd"; // HTML5Backend 這個(gè)庫(kù)是必須的,類似于React的合成事件 // 解決瀏覽器差異,抽象事件操作為可以處理的state import HTML5Backend from "react-dnd-html5-backend"; import "./index.css" const data = [ {id: 10, text: "1"}, {id: 11, text: "2"}, {id: 12, text: "3"}, {id: 13, text: "4"}, {id: 14, text: "5"} ] const datas = { data } class Item extends React.Component { constructor(props) { super(props) } render() { const {connectDragSource, connectDropTarget, move, ...restProps} = this.props; return ( connectDragSource( connectDropTarget({restProps.text}) ) ) } } const dragNode = DragSource("li", { beginDrag(props, monitor, component) { return { index: props.index, }; }, }, connect => ({ connectDragSource: connect.dragSource(), }))(Item); const DropNode = DropTarget("li", { drop(props, monitor) { const dragIndex = monitor.getItem().index; const hoverIndex = props.index; if (dragIndex === hoverIndex) return; props.move(dragIndex, hoverIndex); //monitor.getItem().index = hoverIndex; } }, function (connect) { return { connectDropTarget: connect.dropTarget() } } )(dragNode) class Demo extends React.Component { state = datas; moveRow = (start, end) => { let {data} = this.state; let temp = data[start] data[start] = data[end]; data[end] = temp; this.setState({data}) } render() { return ({ this.state.data.map( (item, index) => { const prop = { move: this.moveRow, key: item.id, id: item.id, text: item.text, index: index } return) } } export default DragDropContext(HTML5Backend)(Demo);}) }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/104241.html
摘要:簡(jiǎn)介在公司初學(xué)其中一個(gè)要求讓我實(shí)現(xiàn)拖拽排序的功能完成之后記錄一下實(shí)現(xiàn)方法,采用和來(lái)實(shí)現(xiàn)這個(gè)功能。一環(huán)境搭建首先,使用腳手架創(chuàng)建一個(gè)最基本的項(xiàng)目。 簡(jiǎn)介 在公司初學(xué)react,其中一個(gè)要求讓我實(shí)現(xiàn)拖拽排序的功能,完成之后記錄一下實(shí)現(xiàn)方法,采用antd和reactDND來(lái)實(shí)現(xiàn)這個(gè)功能。 一、環(huán)境搭建 首先,使用 create-react-app 腳手架創(chuàng)建一個(gè)最基本的react項(xiàng)目。 np...
摘要:等等這不就用的將的給覆蓋了么這也很合理的解釋了為啥會(huì)報(bào)錯(cuò)了。嗯還是拿不到,想起來(lái)了,雖然將靜態(tài)屬性拿了出來(lái),但是原型方法不會(huì)拿出來(lái)啊,所以的就沒用了,所以我們需要也將他拿出來(lái),于是,加上一下代碼這次總算拿到正確的結(jié)果了,開心 踩坑場(chǎng)景 在做業(yè)務(wù)的時(shí)候,有些模塊是可以拖動(dòng)的,恰好這些模塊需要從根組件App的context上拿屬性,同時(shí)App也是作為拖動(dòng)上下文,被@DragDropCont...
摘要:最近的項(xiàng)目里需要實(shí)現(xiàn)一個(gè)標(biāo)簽組件,內(nèi)部標(biāo)簽可任意拖動(dòng)排序。網(wǎng)上搜了一圈發(fā)現(xiàn)幾乎沒有現(xiàn)成的基于的組件能很好的滿足需求。 最近的項(xiàng)目里需要實(shí)現(xiàn)一個(gè)標(biāo)簽組件,內(nèi)部標(biāo)簽可任意拖動(dòng)排序。網(wǎng)上搜了一圈發(fā)現(xiàn)幾乎沒有現(xiàn)成的基于react的組件能很好的滿足需求。 較為知名的是react-dnd,然而它似乎只支持把一個(gè)元素移到固定的位置,我需要的是一個(gè)標(biāo)簽可以移動(dòng)到任意位置的兩個(gè)標(biāo)簽之間(每個(gè)標(biāo)簽長(zhǎng)度不固...
摘要:在初步完成了在線流程圖編輯工具之后又接到了在線搭建頁(yè)面工具的需求剛開始其實(shí)并不想接項(xiàng)目因?yàn)閺臍v史以及現(xiàn)實(shí)原因來(lái)看個(gè)性化及動(dòng)態(tài)渲染都是很難解決的痛點(diǎn)各種頁(yè)面搭建工具的不溫不火早已說明了這條路并沒有這么好走但從另一個(gè)方面來(lái)說既然有了這樣的需求那 在初步完成了在線流程圖編輯工具之后,又接到了在線搭建頁(yè)面工具的需求,剛開始其實(shí)并不想接項(xiàng)目,因?yàn)閺臍v史以及現(xiàn)實(shí)原因來(lái)看,個(gè)性化及動(dòng)態(tài)渲染都是很難解決的痛...
摘要:注意點(diǎn)在鼠標(biāo)操作拖放期間,有一些事件可能觸發(fā)多次,比如和。可拖拽元素,建議使用,設(shè)定可拖拽元素的鼠標(biāo)游標(biāo),提升交互。在中使用拖拽中使用可以直接綁定到組件上。 什么是 Drag and Drop (拖放)? 簡(jiǎn)單來(lái)說,HTML5 提供了 Drag and Drop API,允許用戶用鼠標(biāo)選中一個(gè)可拖動(dòng)元素,移動(dòng)鼠標(biāo)拖放到一個(gè)可放置到元素的過程。 我相信每個(gè)人都或多或少接觸過拖放,比如瀏覽...
閱讀 2638·2023-04-25 19:24
閱讀 1879·2021-11-11 16:54
閱讀 2973·2021-11-08 13:19
閱讀 3701·2021-10-25 09:45
閱讀 2754·2021-09-13 10:24
閱讀 3490·2021-09-07 10:15
閱讀 4335·2021-09-07 10:14
閱讀 3108·2019-08-30 15:56