亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

react拖拽排序組件怎么使用

小億
112
2024-02-01 11:50:59
欄目: 編程語言

要使用React拖拽排序組件,首先需要安裝相關的庫。最常用的庫是react-dndreact-dnd-html5-backend

  1. 首先,在你的項目中安裝這兩個庫:
npm install react-dnd react-dnd-html5-backend
  1. 創建一個可拖拽的組件。你可以使用react-dnd提供的DragSourceDropTarget高階組件來實現拖拽功能。
import { DragSource, DropTarget } from "react-dnd";

const ItemTypes = {
  CARD: "card"
};

// 創建一個DragSource
const cardSource = {
  beginDrag(props) {
    return {
      id: props.id,
      index: props.index
    };
  }
};

const collectDragSource = (connect, monitor) => {
  return {
    connectDragSource: connect.dragSource(),
    isDragging: monitor.isDragging()
  };
};

// 創建一個DropTarget
const cardTarget = {
  drop(props, monitor) {
    const dragIndex = monitor.getItem().index;
    const hoverIndex = props.index;

    // 在這里可以調用一個回調函數來更新排序
    props.onMove(dragIndex, hoverIndex);
  }
};

const collectDropTarget = (connect, monitor) => {
  return {
    connectDropTarget: connect.dropTarget()
  };
};

// 最終的可拖拽組件
const DraggableCard = ({ text, isDragging, connectDragSource, connectDropTarget }) => {
  return connectDragSource(
    connectDropTarget(
      <div style={{ opacity: isDragging ? 0.5 : 1 }}>
        {text}
      </div>
    )
  );
};

export default DragSource(ItemTypes.CARD, cardSource, collectDragSource)(
  DropTarget(ItemTypes.CARD, cardTarget, collectDropTarget)(DraggableCard)
);
  1. 創建一個容器組件,用來渲染拖拽排序的列表。
import { useState } from "react";
import update from "immutability-helper";
import DraggableCard from "./DraggableCard";

const SortableList = () => {
  const [cards, setCards] = useState([
    { id: 1, text: "Card 1" },
    { id: 2, text: "Card 2" },
    { id: 3, text: "Card 3" }
  ]);

  const handleMoveCard = (dragIndex, hoverIndex) => {
    const dragCard = cards[dragIndex];

    setCards(
      update(cards, {
        $splice: [
          [dragIndex, 1],
          [hoverIndex, 0, dragCard]
        ]
      })
    );
  };

  return (
    <div>
      {cards.map((card, index) => (
        <DraggableCard
          key={card.id}
          id={card.id}
          index={index}
          text={card.text}
          onMove={handleMoveCard}
        />
      ))}
    </div>
  );
};

export default SortableList;
  1. 最后,在你的應用中使用SortableList組件。
import SortableList from "./SortableList";

const App = () => {
  return (
    <div>
      <h1>Sortable List</h1>
      <SortableList />
    </div>
  );
};

export default App;

現在,你就可以在應用中使用拖拽排序組件了。當你拖拽一個卡片并放置到另一個位置時,列表將會重新排序。

0
达州市| 渭源县| 金溪县| 鸡泽县| 新竹县| 旬阳县| 连南| 怀宁县| 秦皇岛市| 翼城县| 潮安县| 荣昌县| 隆回县| 萝北县| 峡江县| 神木县| 太仆寺旗| 绥江县| 二连浩特市| 岢岚县| 吉木萨尔县| 威远县| 马龙县| 富平县| 邻水| 龙州县| 江川县| 鹤山市| 景德镇市| 顺昌县| 锡林郭勒盟| 古田县| 阿克陶县| 夹江县| 林口县| 曲水县| 文登市| 大埔区| 宜城市| 井陉县| 南宁市|