πŸŽ‰ 75% of content is free forever β€” Unlock Premium from $10/mo β†’
CW
Search courses…
πŸ’Ό Servicesℹ️ Aboutβœ‰οΈ ContactView Pricing Plansfrom $10

Advanced Drag and Drop

React UI🟒 Free Lesson

Advertisement

Advanced Drag and Drop

Multi-container sorting, drag previews, drop indicators, and touch support.

Overview

Advanced DnD patterns enable complex interfaces like kanban boards and file managers.

Key Concepts

  • Multi-Container β€” Drag items between containers
  • Drag Previews β€” Custom preview during drag
  • Drop Indicators β€” Visual feedback for drop targets
  • Touch Support β€” Mobile-friendly drag and drop
  • Animate on Drop β€” Smooth animations when items settle

Code Examples

import { DndContext, DragOverlay, closestCorners } from '@dnd-kit/core';
import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';

function KanbanBoard({ columns, onMoveCard }) {
  const [activeCard, setActiveCard] = useState(null);

  const handleDragStart = (event) => {
    setActiveCard(event.active.data.current.card);
  };

  const handleDragEnd = (event) => {
    const { active, over } = event;
    setActiveCard(null);
    
    if (over) {
      const sourceColumn = active.data.current.columnId;
      const destColumn = over.data.current?.columnId || over.id;
      onMoveCard(active.id, sourceColumn, destColumn);
    }
  };

  return (
    <DndContext
      collisionDetection={closestCorners}
      onDragStart={handleDragStart}
      onDragEnd={handleDragEnd}
    >
      <div className="board">
        {columns.map(column => (
          <Column key={column.id} column={column} />
        ))}
      </div>
      <DragOverlay>
        {activeCard && <Card card={activeCard} />}
      </DragOverlay>
    </DndContext>
  );
}

function Column({ column }) {
  return (
    <div className="column" data-column-id={column.id}>
      <h3>{column.title}</h3>
      <SortableContext items={column.cards.map(c => c.id)} strategy={verticalListSortingStrategy}>
        <div className="card-list">
          {column.cards.map(card => (
            <SortableCard key={card.id} card={card} columnId={column.id} />
          ))}
        </div>
      </SortableContext>
    </div>
  );
}

Practice

Build a multi-container sortable list with custom drag previews.

⭐

Premium Content

Advanced Drag and Drop

Unlock this lesson and 900+ advanced tutorials with a Premium plan.

🎯End-to-end Projects
πŸ’ΌInterview Prep
πŸ“œCertificates
🀝Community Access

Already a member? Log in

Need Expert React Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement