View in Telegram
πŸš€ Drag-and-Drop Π² React: простоС руководство Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» drag-and-drop часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ элСмСнтов, пСрСмСщСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… дСйствий. БСгодня Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² React с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями! πŸ”Ή ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ шаги для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ 1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ событий пСрСтаскивания Π’ HTML5 Π΅ΡΡ‚ΡŒ встроСнныС события для drag-and-drop: - onDragStart β€” ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ пСрСтаскиваниС. - onDragOver β€” позволяСт элСмСнту Π±Ρ‹Ρ‚ΡŒ Π·ΠΎΠ½ΠΎΠΉ для сброса. - onDrop β€” срабатываСт ΠΏΡ€ΠΈ отпускании элСмСнта. 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ ΠΌΡ‹ добавляСм элСмСнт для пСрСтаскивания ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ для сброса.
import React, { useState } from 'react';

const DragAndDrop = () => {
  const [droppedItem, setDroppedItem] = useState('');

  const handleDragStart = (e, data) => {
    e.dataTransfer.setData('text/plain', data);
  };

  const handleDrop = (e) => {
    e.preventDefault();
    const data = e.dataTransfer.getData('text/plain');
    setDroppedItem(data);
  };

  const handleDragOver = (e) => {
    e.preventDefault();
  };

  return (
    <div>
      <div
        draggable
        onDragStart={(e) => handleDragStart(e, 'ΠŸΠ΅Ρ€Π΅Ρ‚Π°Ρ‰Π΅Π½ΠΎ!')}
        style={{ width: '150px', padding: '10px', backgroundColor: '#f0f0f0', cursor: 'grab', marginBottom: '20px' }}
      >
        ΠŸΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈ мСня!
      </div>

      <div
        onDrop={handleDrop}
        onDragOver={handleDragOver}
        style={{ width: '200px', height: '100px', backgroundColor: '#e0e0e0' }}
      >
        Π‘Ρ€ΠΎΡΡŒ сюда!
      </div>

      {droppedItem && <p>Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: {droppedItem}</p>}
    </div>
  );
};

export default DragAndDrop;
πŸ”Ή ОбъяснСниС 1. `draggable` УстанавливаСт элСмСнт ΠΊΠ°ΠΊ "пСрСтаскиваСмый". 2. `dataTransfer` Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ событиями onDragStart ΠΈ onDrop. 3. `onDragOver` ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сброс элСмСнта. 4. Бтилизация ДобавляСм Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ подсказки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π±Ρ‹Π»ΠΎ понятно, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. πŸ”Ή ИспользованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ `react-dnd` Для Π±ΠΎΠ»Π΅Π΅ слоТных сцСнариСв, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ пСрСтаскиваниС списков ΠΈΠ»ΠΈ взаимодСйствиС с нСсколькими элСмСнтами, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ react-dnd. Установка:
npm install react-dnd react-dnd-html5-backend
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:
import React from 'react';
import { DndProvider, useDrag, useDrop } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend';

const ItemType = 'BOX';

const DraggableItem = ({ id }) => {
  const [, dragRef] = useDrag(() => ({
    type: ItemType,
    item: { id },
  }));

  return (
    <div ref={dragRef} style={{ padding: '10px', backgroundColor: '#f0f0f0', marginBottom: '10px', cursor: 'grab' }}>
      Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ {id}
    </div>
  );
};

const DropZone = ({ onDrop }) => {
  const [, dropRef] = useDrop(() => ({
    accept: ItemType,
    drop: (item) => onDrop(item.id),
  }));

  return (
    <div
      ref={dropRef}
      style={{ width: '200px', height: '100px', backgroundColor: '#e0e0e0' }}
    >
      Π‘Ρ€ΠΎΡΡŒ сюда!
    </div>
  );
};

const DragAndDropExample = () => {
  const handleDrop = (id) => {
    alert(`Π’Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΠ»ΠΈ элСмСнт ${id}`);
  };

  return (
    <DndProvider backend={HTML5Backend}>
      <DraggableItem id={1} />
      <DraggableItem id={2} />
      <DropZone onDrop={handleDrop} />
    </DndProvider>
  );
};

export default DragAndDropExample;
πŸ”Ή ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° использования `react-dnd` - Удобная Ρ€Π°Π±ΠΎΡ‚Π° с мноТСством элСмСнтов. - ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° слоТных сцСнариСв (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, пСрСтаскиваниС ΠΌΠ΅ΠΆΠ΄Ρƒ списками). - Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности кастомизации повСдСния. 🎯 Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ React ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ drag-and-drop благодаря событиям HTML5, Π° для слоТных Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ€ΠΎΠ΄Π΅ react-dnd ReactJs Daily | #begginers
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Find friends or serious relationships easily