0Pricing
React Academy · Lektion

DndContext, useDraggable und useDroppable

Den DndContext-Provider einbinden und mit den zugehörigen Hooks ziehbare und ablegbare Elemente erstellen

DndContext, useDraggable und useDroppable ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Ihr Feature mit DndContext umschließen

Jedes Drag-and-drop-Feature in dnd-kit muss in eine DndContext-Komponente eingeschlossen werden. DndContext ist die zentrale Koordinationsstelle: Es verfolgt aktive Drag-Vorgänge, vermittelt zwischen ziehbaren und ablegbaren Elementen und löst Ereignis-Callbacks aus. Üblicherweise platzieren Sie es auf der Ebene der Komponente, die den Drag-Status verwaltet.

Aufbau des useDraggable-Hooks

Der useDraggable({ id })-Hook macht eine Komponente ziehbar. Er gibt vier zentrale Werte zurück: attributes (ARIA-Props, die auf das Element angewendet werden), listeners (Event-Handler zum Starten des Drag-Vorgangs), setNodeRef (verbindet die Referenz mit dem ziehbaren Element) und transform (die aktuelle Verschiebung als {x, y, scaleX, scaleY}).

useDraggable auf ein Element anwenden

Um ein ziehbares Element einzurichten, wenden Sie attributes und listeners auf das Element an und übergeben setNodeRef als ref-Prop. Die Attribute enthalten role="button", tabIndex und ARIA-Eigenschaften. Die Listener verbinden Pointer- und Tastatur-Event-Handler, die dnd-kit zur Erkennung des Drag-Starts benötigt.

Den Transformationsstil anwenden

Der Wert transform von useDraggable ist null, wenn kein Drag-Vorgang läuft, und während des Ziehens ein Koordinatenobjekt. Sie wandeln ihn mit CSS.Translate.toString(transform) aus dem Paket @dnd-kit/utilities in einen CSS-String um. Wenden Sie diesen als CSS-Eigenschaft transform auf das ziehbare Element an, damit es dem Cursor visuell folgt.

Aufbau des useDroppable-Hooks

Der useDroppable({ id })-Hook kennzeichnet einen Container als gültiges Ablageziel. Er gibt isOver (einen booleschen Wert, der während des Überfahrens eines ziehbaren Elements true ist) und setNodeRef zurück, um die Referenz mit dem ablegbaren Element zu verbinden. Anders als bei useDraggable müssen keine Event-Listener angewendet werden.

Visuelles Feedback mit isOver

Mit dem Wert isOver von useDroppable können Sie während eines Drag-Vorgangs visuelles Feedback geben. Wenn isOver true ist, können Sie die Ablagezone mit einer Hervorhebungsfarbe, einem Rahmen oder einer geänderten Hintergrundfarbe darstellen. Dies hilft Benutzern zu verstehen, wo sie das Element ablegen können, und ist entscheidend für Benutzerfreundlichkeit und Barrierefreiheit.

onDragEnd: Das Ergebnis auslesen

Der onDragEnd-Callback von DndContext erhält ein Ereignisobjekt mit zwei wichtigen Eigenschaften: event.active enthält das gezogene Element einschließlich seiner id, und event.over enthält das Ablageziel (oder null, wenn das Element außerhalb eines ablegbaren Bereichs abgelegt wurde). Mit diesen IDs aktualisieren Sie den Status Ihrer Anwendung.

Zustand nach dem Ablegen aktualisieren

In onDragEnd aktualisieren Sie nach der Prüfung, dass event.over nicht null ist, Ihren Zustand, um die Verschiebung abzubilden. Wenn Sie beispielsweise eine Karte zwischen Spalten eines Kanban-Boards verschieben, entfernen Sie die Karte aus der Quellspalte und fügen sie der durch event.over.id identifizierten Zielspalte hinzu.

DragOverlay für schwebende Vorschau

DragOverlay rendert eine schwebende Vorschau des gezogenen Elements, die dem Cursor folgt. Es wird als Portal gerendert (außerhalb des normalen DOM-Baums), sodass es niemals von Containern mit overflow:hidden abgeschnitten wird. Im Gegensatz zum ursprünglichen Element kann das Overlay Schlagschatten, Skalierungstransformationen oder eine Drehung verwenden, um anzuzeigen, dass es gezogen wird.

activeDragId für das Overlay verfolgen

Damit in DragOverlay der richtige Inhalt gerendert wird, verfolgen Sie mithilfe des Callbacks onDragStart, welches Element gerade gezogen wird. Speichern Sie die aktive ID im Zustand: setActiveDragId(event.active.id). Setzen Sie sie in onDragEnd auf null zurück. Verwenden Sie innerhalb von DragOverlay activeDragId, um das richtige Element nachzuschlagen und zu rendern.

Draggable und Droppable kombinieren

Eine echte Drag-and-drop-Oberfläche kombiniert DndContext, mehrere useDraggable-Elemente, mehrere useDroppable-Zonen und eine Zustandsverwaltung, um zu verfolgen, wo sich welches Element befindet. Die zentrale Erkenntnis ist: dnd-kit stellt die Mechanik bereit – Sie müssen den Zustand in onDragEnd aktualisieren und die Oberfläche neu rendern, damit sie die neue Anordnung widerspiegelt.

Transform-Stil anwenden

Welche Hilfsfunktion konvertiert das transform-Objekt aus useDraggable in eine CSS-Transform-Zeichenkette?

Lektionsrückblick: Zentrale Hooks

DndContext ist die zentrale Koordinationsstelle für alle Drag-Operationen von dnd-kit. useDraggable stellt attributes, listeners, setNodeRef und transform für ziehbare Elemente bereit. useDroppable stellt isOver und setNodeRef für Ablageziele bereit. onDragEnd liefert Ihnen event.active.id und event.over?.id, damit Sie den Zustand aktualisieren können. DragOverlay rendert eine schwebende Vorschau auf Portal-Basis.

Häufig gestellte Fragen

Ist die Lektion „DndContext, useDraggable und useDroppable“ kostenlos?

Ja — der vollständige Text von „DndContext, useDraggable und useDroppable“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „DndContext, useDraggable und useDroppable“?

Den DndContext-Provider einbinden und mit den zugehörigen Hooks ziehbare und ablegbare Elemente erstellen Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um React Academy zu starten?

Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „DndContext, useDraggable und useDroppable“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?

Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. dnd-kit-Architektur und barrierefreies Design
  2. DndContext, useDraggable und useDroppable
  3. SortableContext für umsortierbare Listen
  4. Benutzerdefinierte Drag-Overlays und DnD mit mehreren Containern
← Zurück zu React Academy