摘要:不多說,直接上代碼需要版本貌似與方法有關類似的高階組件包裹被拖的元素高階組件包裹被釋放的元素這個庫是必須的,類似于的合成事件解決瀏覽器差異,抽象事件操作為可以處理的
不多說,直接上代碼
react-dnd 需要react版本 > 16.6 ,貌似與react.memo方法有關
import React from "react" // DragDropContext 類似React的Context // DragSource 高階組件 包裹被拖的元素 // DropTarget 高階組件 包裹被釋放的元素 import {DragDropContext, DragSource, DropTarget} from "react-dnd"; // HTML5Backend 這個庫是必須的,類似于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);}) }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104241.html
摘要:簡介在公司初學其中一個要求讓我實現拖拽排序的功能完成之后記錄一下實現方法,采用和來實現這個功能。一環境搭建首先,使用腳手架創建一個最基本的項目。 簡介 在公司初學react,其中一個要求讓我實現拖拽排序的功能,完成之后記錄一下實現方法,采用antd和reactDND來實現這個功能。 一、環境搭建 首先,使用 create-react-app 腳手架創建一個最基本的react項目。 np...
摘要:等等這不就用的將的給覆蓋了么這也很合理的解釋了為啥會報錯了。嗯還是拿不到,想起來了,雖然將靜態屬性拿了出來,但是原型方法不會拿出來啊,所以的就沒用了,所以我們需要也將他拿出來,于是,加上一下代碼這次總算拿到正確的結果了,開心 踩坑場景 在做業務的時候,有些模塊是可以拖動的,恰好這些模塊需要從根組件App的context上拿屬性,同時App也是作為拖動上下文,被@DragDropCont...
摘要:最近的項目里需要實現一個標簽組件,內部標簽可任意拖動排序。網上搜了一圈發現幾乎沒有現成的基于的組件能很好的滿足需求。 最近的項目里需要實現一個標簽組件,內部標簽可任意拖動排序。網上搜了一圈發現幾乎沒有現成的基于react的組件能很好的滿足需求。 較為知名的是react-dnd,然而它似乎只支持把一個元素移到固定的位置,我需要的是一個標簽可以移動到任意位置的兩個標簽之間(每個標簽長度不固...
摘要:在初步完成了在線流程圖編輯工具之后又接到了在線搭建頁面工具的需求剛開始其實并不想接項目因為從歷史以及現實原因來看個性化及動態渲染都是很難解決的痛點各種頁面搭建工具的不溫不火早已說明了這條路并沒有這么好走但從另一個方面來說既然有了這樣的需求那 在初步完成了在線流程圖編輯工具之后,又接到了在線搭建頁面工具的需求,剛開始其實并不想接項目,因為從歷史以及現實原因來看,個性化及動態渲染都是很難解決的痛...
摘要:注意點在鼠標操作拖放期間,有一些事件可能觸發多次,比如和。可拖拽元素,建議使用,設定可拖拽元素的鼠標游標,提升交互。在中使用拖拽中使用可以直接綁定到組件上。 什么是 Drag and Drop (拖放)? 簡單來說,HTML5 提供了 Drag and Drop API,允許用戶用鼠標選中一個可拖動元素,移動鼠標拖放到一個可放置到元素的過程。 我相信每個人都或多或少接觸過拖放,比如瀏覽...
閱讀 2484·2023-04-25 19:24
閱讀 1700·2021-11-11 16:54
閱讀 2833·2021-11-08 13:19
閱讀 3547·2021-10-25 09:45
閱讀 2552·2021-09-13 10:24
閱讀 3276·2021-09-07 10:15
閱讀 4014·2021-09-07 10:14
閱讀 2950·2019-08-30 15:56