cari
Rumahhujung hadapan webSoal Jawab bahagian hadapanCara react-dnd melaksanakan seret dan lepas

Kaedah pelaksanaan: 1. Gunakan "import{DndProvider}from 'react-dnd'" untuk menentukan julat boleh seret; 2. Gunakan "import{useDrag}from 'react-dnd'" untuk membungkus DragSource Just pegang komponen supaya ia boleh diseret.

Cara react-dnd melaksanakan seret dan lepas

Persekitaran pengendalian tutorial ini: Sistem Windows 10, bertindak balas versi 17.0.1, komputer Dell G3.

Cara melaksanakan seret dan lepas dengan react-dnd

React DnD ialah set komponen peringkat tinggi React yang dicipta oleh Dan Abramov, pengarang teras React dan Redux, yang boleh membantu membina komponen kompleks sambil memastikan komponen diasingkan.

Keperluan untuk React DnD

  • Menggunakan API seret dan lepas HTML5 secara lalai, tetapi menyokong

  • Tidak mengendalikan DOM secara langsung

  • DOM dan sumber seret dan lepas serta penyahgandingan sasaran

  • Menggabungkan pencurian jenis ke dalam HTML5 drag-and-drop Idea padanan dan penghantaran data

Ciri React DnD

Fokus pada seret dan lepas, tidak tersedia Komponen siap

React DnD menyediakan satu set primitif berkuasa, tetapi ia tidak mengandungi sebarang komponen siap sedia, sebaliknya, ia membalut komponen pengguna dan menyuntik prop. Ia adalah tahap yang lebih rendah daripada UI jQuery, dsb., memfokuskan pada membuat interaksi drag-and-drop betul, dan meninggalkan kesan visual seperti sekatan koordinat kepada pengguna. Ini sebenarnya adalah prinsip pengasingan kebimbangan Sebagai contoh, React DnD tidak berhasrat untuk menyediakan komponen boleh diisih, tetapi pengguna boleh dengan cepat membangunkan mana-mana komponen boleh disusun tersuai yang diperlukan berdasarkannya.

Aliran data sehala

Ia menggunakan pemaparan deklaratif yang serupa dengan React, dan menggunakan seni bina aliran data sehala seperti redux Malah, Redux digunakan secara dalaman

Sembunyikan isu dengan API asas platform

API drag-and-drop HTML5 penuh dengan perangkap dan ketidakkonsistenan penyemak imbas. React DnD mengendalikannya secara dalaman untuk anda, jadi pengguna boleh menumpukan pada membangunkan aplikasi dan bukannya menyelesaikan masalah penyemak imbas.

Boleh diperluas dan boleh diuji

React DnD menyediakan pembalut API drag-and-drop HTML5 secara lalai, tetapi ia juga membenarkan anda menyediakan "backend" tersuai. Anda boleh membuat bahagian belakang DnD tersuai berdasarkan peristiwa sentuhan, acara tetikus atau perkara lain. Contohnya, bahagian belakang mengejek terbina dalam membolehkan anda menguji interaksi seret dan lepas komponen dalam persekitaran Nod.

Bersedia untuk masa hadapan

React DnD tidak mengeksport campuran dan berfungsi sama baik dengan mana-mana komponen, sama ada mereka menggunakan kelas ES6, createReactClass atau rangka kerja React lain Dicipta. Dan API menyokong penghias ES7.

Contohnya adalah seperti berikut:

1.1 Gunakan DndProvider untuk mentakrifkan julat boleh seret

/*
 * @Author: muge
 * @Date: 2021-12-04 16:59:25
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2021-12-08 14:24:47
 */
import React, { useState } from 'react';
import { DndProvider } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend';
import SourceBox from './SourceBox';
import TargetBox from './TargetBox';
import TreeBox from './TreeBox';
const item: any[] = [
  {
    id: 1,
    name: 'muge',
  },
  {
    id: 2,
    name: 'muxi',
  },
  {
    id: 3,
    name: 'mugege',
  },
];
const Container = () => {
  // 当前拖拽项
  const [currentList, setCurrentList] = useState<any>({});
  return (
    // 类似redux数据传输  需要在最外层包裹对象
    <DndProvider backend={HTML5Backend}>
      <h1 id="拖拽源组件-nbsp-列表-树">拖拽源组件 列表-----树</h1>
      <div style={{ display: &#39;flex&#39; }}>
        <div>
          {/* 列表拖拽源 */}
          {item.map((itemz: any, index: number) => (
            <SourceBox setCurrentList={setCurrentList} item={itemz} key={index} />
          ))}
        </div>
        {/* 注意,不要树组件整体直接设置拖拽,抽成一个组件来遍历每一项 =》自定义渲染*/}
        {/* 树形拖拽源 */}
        <TreeBox />
      </div>
      <h1 id="拖拽放置目标">拖拽放置目标</h1>
      {/* 拖拽最终放置组件 */}
      <TargetBox currentList={currentList} />
    </DndProvider>
  );
};
export default Container;

2 DragSource membalut komponen supaya ia boleh diseret

/*
 * @Author: muge
 * @Date: 2021-12-07 14:26:08
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2021-12-08 14:18:52
 */
import { useDrag } from &#39;react-dnd&#39;;
const ItemTypes = {
  BOX: &#39;box&#39;,
};
const style = {
  border: &#39;1px dashed gray&#39;,
  backgroundColor: &#39;white&#39;,
  padding: &#39;0.5rem 1rem&#39;,
  marginRight: &#39;1rem&#39;,
  marginBottom: &#39;1rem&#39;,
  cursor: &#39;move&#39;,
};
const SourceBox = ({ item, setCurrentList }: any) => {
  const [{ opacity }, drag] = useDrag(
    () => ({
      type: ItemTypes.BOX,
      collect: (monitor) => ({
        opacity: monitor.isDragging() ? 0.4 : 1,
      }),
      item: () => item, //返回当前列表项数据
      canDrag: (monitor) => {
        //是否取消拖拽
        console.log(monitor, &#39;monitor131&#39;);
        return true;
      },
      //
      end(currentItem, monitor) {
        // monitor.getDropResult(); //获取拖拽对象所处容器的数据
        // monitor.didDrop(); // 当前容器能否放置拖拽对象 拖动停止时触发
        monitor.didDrop() && setCurrentList(currentItem); //在容器点松开 才赋值
      },
    }),
    [],
  );
  return (
    <div ref={drag} style={{ ...style, opacity }}>
      {item.id}------{item.name}
    </div>
  );
};
export default SourceBox;

3. Gunakan DropTarget untuk membalut komponen supaya ia bertindak balas terhadap menyeret, melayang atau menjatuhkan item yang serasi.

/*
 * @Author: muge
 * @Date: 2021-12-07 14:26:08
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2021-12-08 14:33:08
 */
import React from &#39;react&#39;;
import { useDrop } from &#39;react-dnd&#39;;
const ItemTypes = {
  BOX: &#39;box&#39;,
};
const style: any = {
  border: &#39;1px solid gray&#39;,
  height: &#39;15rem&#39;,
  width: &#39;15rem&#39;,
  padding: &#39;2rem&#39;,
  textAlign: &#39;center&#39;,
};
const TargetBox = ({ currentList }: any) => {
  const [{ isActive, isOver, canDrop }, drop] = useDrop(() => ({
    accept: ItemTypes.BOX,
    collect: (monitor) => ({
      isActive: monitor.canDrop() && monitor.isOver(),
      isOver: monitor.isOver(),
      canDrop: monitor.canDrop(),
    }),
    // hover: (item, monitor) => {
    //   console.log(item, &#39;item&#39;);
    //   console.log(monitor, &#39;monitor&#39;);
    // },
  }));
  // console.log(isOver, &#39;isOver&#39;);
  // console.log(canDrop, &#39;canDrop&#39;);
  return (
    <div ref={drop} style={style}>
      {isActive ? &#39;Release to drop&#39; : &#39;Drag item here&#39;}
      <div
        style={{
          backgroundColor: &#39;pink&#39;,
          height: 30,
          display: &#39;flex&#39;,
          alignItems: &#39;center&#39;,
          justifyContent: &#39;center&#39;,
          fontSize: 17,
          fontWeight: 600,
          width: &#39;100%&#39;,
        }}
      >
        {JSON.stringify(currentList) !== &#39;{}&#39; ? JSON.stringify(currentList) : &#39;当前item&#39;}
      </div>
    </div>
  );
};
export default TargetBox;

Seret dan lepas ke senarai ini untuk melengkapkan

Pembelajaran yang disyorkan: "tutorial video bertindak balas"

Atas ialah kandungan terperinci Cara react-dnd melaksanakan seret dan lepas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
React and the Frontend Stack: Alat dan TeknologiReact and the Frontend Stack: Alat dan TeknologiApr 10, 2025 am 09:34 AM

React adalah perpustakaan JavaScript untuk membina antara muka pengguna, dengan komponen terasnya dan pengurusan negeri. 1) Memudahkan pembangunan UI melalui komponen dan pengurusan negeri. 2) Prinsip kerja termasuk perdamaian dan rendering, dan pengoptimuman dapat dilaksanakan melalui React.Memo dan Usememo. 3) Penggunaan asas adalah untuk membuat dan membuat komponen, dan penggunaan lanjutan termasuk menggunakan cangkuk dan konteksapi. 4) Kesalahan biasa seperti kemas kini status yang tidak betul, anda boleh menggunakan ReactDevTools untuk debug. 5) Pengoptimuman prestasi termasuk menggunakan react.memo, senarai virtualisasi dan codesplitting, dan menyimpan kod yang boleh dibaca dan dikekalkan adalah amalan terbaik.

Peranan React dalam HTML: Meningkatkan Pengalaman PenggunaPeranan React dalam HTML: Meningkatkan Pengalaman PenggunaApr 09, 2025 am 12:11 AM

React menggabungkan JSX dan HTML untuk meningkatkan pengalaman pengguna. 1) JSX membenamkan HTML untuk menjadikan pembangunan lebih intuitif. 2) Mekanisme DOM maya mengoptimumkan prestasi dan mengurangkan operasi DOM. 3) UI pengurusan berasaskan komponen untuk meningkatkan kebolehkerjaan. 4) Pengurusan negeri dan pemprosesan acara meningkatkan interaktiviti.

Komponen React: Membuat unsur -unsur yang boleh diguna semula di HTMLKomponen React: Membuat unsur -unsur yang boleh diguna semula di HTMLApr 08, 2025 pm 05:53 PM

Komponen React boleh ditakrifkan oleh fungsi atau kelas, merangkumi logik UI dan menerima data input melalui prop. 1) Tentukan komponen: Gunakan fungsi atau kelas untuk mengembalikan elemen bertindak balas. 2) Rendering Component: React Call Render Kaedah atau Melaksanakan Komponen Fungsi. 3) Komponen multiplexing: Lulus data melalui prop untuk membina UI yang kompleks. Pendekatan kitaran hayat komponen membolehkan logik dilaksanakan pada peringkat yang berbeza, meningkatkan kecekapan pembangunan dan pemeliharaan kod.

Tujuan mod yang ketatTujuan mod yang ketatApr 02, 2025 pm 05:51 PM

React Mode Strict adalah alat pembangunan yang menyoroti isu -isu yang berpotensi dalam aplikasi React dengan mengaktifkan cek tambahan dan amaran. Ia membantu mengenal pasti kod warisan, hayat yang tidak selamat, dan kesan sampingan, menggalakkan amalan reaksi moden.

Reaksi penggunaan serpihanReaksi penggunaan serpihanApr 02, 2025 pm 05:50 PM

Serpihan bertindak balas membolehkan kumpulan kanak -kanak tanpa nod dom tambahan, meningkatkan struktur, prestasi, dan kebolehaksesan. Mereka menyokong kekunci untuk rendering senarai yang cekap.

Proses Perdamaian ReactProses Perdamaian ReactApr 02, 2025 pm 05:49 PM

Artikel ini membincangkan proses perdamaian React, memperincikan bagaimana ia mengemas kini DOM dengan cekap. Langkah -langkah utama termasuk mencetuskan perdamaian, mewujudkan DOM maya, menggunakan algoritma yang berbeza, dan memohon kemas kini DOM yang minimum. Ia juga meliputi perfo

Dom maya dijelaskanDom maya dijelaskanApr 02, 2025 pm 05:49 PM

Artikel ini membincangkan DOM maya, konsep utama dalam pembangunan web yang meningkatkan prestasi dengan meminimumkan manipulasi DOM langsung dan mengoptimumkan kemas kini.

Elemen vs perbezaan komponenElemen vs perbezaan komponenApr 02, 2025 pm 05:46 PM

Artikel ini membincangkan perbezaan antara unsur -unsur dan komponen dalam pembangunan perisian, menonjolkan peranan, perbezaan, dan kesan mereka terhadap pengurusan projek. Isu utama termasuk kerumitan, kebolehgunaan semula, dan fungsi dalam interfac pengguna

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini