成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

React-dnd實現(xiàn)拖拽,最簡單代碼,直接可以跑

xiaokai / 772人閱讀

摘要:不多說,直接上代碼需要版本貌似與方法有關(guān)類似的高階組件包裹被拖的元素高階組件包裹被釋放的元素這個庫是必須的,類似于的合成事件解決瀏覽器差異,抽象事件操作為可以處理的

不多說,直接上代碼

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  這個庫是必須的,類似于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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104241.html

相關(guān)文章

  • 使用React DND 完成一個簡單的卡片排序功能

    摘要:簡介在公司初學(xué)其中一個要求讓我實現(xiàn)拖拽排序的功能完成之后記錄一下實現(xiàn)方法,采用和來實現(xiàn)這個功能。一環(huán)境搭建首先,使用腳手架創(chuàng)建一個最基本的項目。 簡介 在公司初學(xué)react,其中一個要求讓我實現(xiàn)拖拽排序的功能,完成之后記錄一下實現(xiàn)方法,采用antd和reactDND來實現(xiàn)這個功能。 一、環(huán)境搭建 首先,使用 create-react-app 腳手架創(chuàng)建一個最基本的react項目。 np...

    edgardeng 評論0 收藏0
  • react-dnd中context丟失解決方法

    摘要:等等這不就用的將的給覆蓋了么這也很合理的解釋了為啥會報錯了。嗯還是拿不到,想起來了,雖然將靜態(tài)屬性拿了出來,但是原型方法不會拿出來啊,所以的就沒用了,所以我們需要也將他拿出來,于是,加上一下代碼這次總算拿到正確的結(jié)果了,開心 踩坑場景 在做業(yè)務(wù)的時候,有些模塊是可以拖動的,恰好這些模塊需要從根組件App的context上拿屬性,同時App也是作為拖動上下文,被@DragDropCont...

    Arno 評論0 收藏0
  • 寫了一個簡單、靈活的React標(biāo)簽組件

    摘要:最近的項目里需要實現(xiàn)一個標(biāo)簽組件,內(nèi)部標(biāo)簽可任意拖動排序。網(wǎng)上搜了一圈發(fā)現(xiàn)幾乎沒有現(xiàn)成的基于的組件能很好的滿足需求。 最近的項目里需要實現(xiàn)一個標(biāo)簽組件,內(nèi)部標(biāo)簽可任意拖動排序。網(wǎng)上搜了一圈發(fā)現(xiàn)幾乎沒有現(xiàn)成的基于react的組件能很好的滿足需求。 較為知名的是react-dnd,然而它似乎只支持把一個元素移到固定的位置,我需要的是一個標(biāo)簽可以移動到任意位置的兩個標(biāo)簽之間(每個標(biāo)簽長度不固...

    arashicage 評論0 收藏0
  • 頁面搭建工具總結(jié)及架構(gòu)思考

    摘要:在初步完成了在線流程圖編輯工具之后又接到了在線搭建頁面工具的需求剛開始其實并不想接項目因為從歷史以及現(xiàn)實原因來看個性化及動態(tài)渲染都是很難解決的痛點各種頁面搭建工具的不溫不火早已說明了這條路并沒有這么好走但從另一個方面來說既然有了這樣的需求那 在初步完成了在線流程圖編輯工具之后,又接到了在線搭建頁面工具的需求,剛開始其實并不想接項目,因為從歷史以及現(xiàn)實原因來看,個性化及動態(tài)渲染都是很難解決的痛...

    William_Sang 評論0 收藏0
  • 使用 Drag and Drop 給Web應(yīng)用提升交互體驗

    摘要:注意點在鼠標(biāo)操作拖放期間,有一些事件可能觸發(fā)多次,比如和??赏献г?,建議使用,設(shè)定可拖拽元素的鼠標(biāo)游標(biāo),提升交互。在中使用拖拽中使用可以直接綁定到組件上。 什么是 Drag and Drop (拖放)? 簡單來說,HTML5 提供了 Drag and Drop API,允許用戶用鼠標(biāo)選中一個可拖動元素,移動鼠標(biāo)拖放到一個可放置到元素的過程。 我相信每個人都或多或少接觸過拖放,比如瀏覽...

    legendmohe 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<