0Pricing
React Academy · Lektion

SortableContext für umsortierbare Listen

SortableContext und useSortable verwenden, um umsortierbare Listen mit flüssigen Animationen zu erstellen

SortableContext für umsortierbare Listen ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.

Was SortableContext macht

SortableContext ist eine spezialisierte dnd-kit-Komponente, die eine Liste mit änderbarer Reihenfolge umschließt. Während useDraggable und useDroppable beliebige Drag-and-drop-Vorgänge verarbeiten, ist SortableContext speziell für den Fall gedacht, dass Elemente einer Liste durch Ziehen an eine neue Position neu angeordnet werden sollen.

Die items-Prop

SortableContext benötigt eine items-Prop: ein Array aus eindeutigen String- oder Number-IDs, die mit den IDs der untergeordneten Sortable-Komponenten übereinstimmen. Die Reihenfolge dieses Arrays definiert die aktuelle Reihenfolge der Elemente. Wenn Sie dieses Array im Zustand aktualisieren, wird die Liste in der neuen Reihenfolge erneut gerendert.

Sortierstrategien

SortableContext akzeptiert eine strategy-Prop, die festlegt, wie Elemente sortiert werden. verticalListSortingStrategy ist für vertikale Listen gedacht und berechnet den Einfügepunkt anhand der vertikalen Position. horizontalListSortingStrategy ist für horizontale Listen gedacht. rectSortingStrategy ist für Raster geeignet. Wählen Sie die Strategie, die zu Ihrem Layout passt.

useSortable-Hook

Innerhalb von SortableContext verwendet jedes Listenelement den Hook useSortable({ id }) anstelle von useDraggable. useSortable ist eine Obermenge von useDraggable – es liefert dieselben attributes, listeners, setNodeRef und transform sowie zusätzliche sortierspezifische Werte wie isDragging und overIndex.

isDragging für den visuellen Zustand

Der Wert isDragging aus useSortable ist true, solange das Element aktiv gezogen wird. Typischerweise verwenden Sie ihn, um die Deckkraft zu verringern oder dem ursprünglichen Listenelement während des Ziehens einen Platzhalterstil zu geben. Diese visuelle Lücke zeigt der Benutzerin bzw. dem Benutzer, wo sich das Element derzeit in der Liste befindet.

Die arrayMove-Hilfsfunktion

dnd-kit exportiert die Hilfsfunktion arrayMove(array, fromIndex, toIndex) aus @dnd-kit/sortable. Sie gibt ein neues Array zurück, in dem das Element an fromIndex an die Position toIndex verschoben wurde. Dies ist die übliche Methode, um Ihr Zustandsarray zu aktualisieren, wenn ein Sortiervorgang durch Ziehen abgeschlossen ist.

onDragEnd für das Sortieren implementieren

Im DndContext-Callback onDragEnd für eine sortierbare Liste ermitteln Sie die alten und neuen Indizes mithilfe von items.indexOf(event.active.id) und items.indexOf(event.over?.id). Wenn beide Indizes gültig und unterschiedlich sind, rufen Sie setItems(arrayMove(items, oldIndex, newIndex)) auf, um das Array neu zu sortieren.

Flüssige Animation verschobener Elemente

Wenn ein Element gezogen wird, bewegen sich die anderen Elemente der Liste an neue Positionen, um zu zeigen, wo das gezogene Element abgelegt wird. useSortable stellt für jedes nicht gezogene Element eine CSS-Transformation bereit, die es aus dem Weg bewegt. Wenn Sie diese Transformation mit einer CSS-Transition versehen, entsteht eine flüssige Bewegungsanimation.

Transition für flüssige Bewegung

Wenden Sie auf die transform-Eigenschaft sortierbarer Elemente eine CSS-Transition an: transition: isDragging ? undefined : transform ? 'transform 200ms ease' : undefined. Während ein Element gezogen wird, ist keine Transition erforderlich, da es dem Cursor direkt folgen soll. Wenn andere Elemente verschoben werden, erzeugt eine Transition eine flüssige Gleitbewegung.

Mit DragOverlay kombinieren

Für die beste Benutzererfahrung kombinieren Sie SortableContext mit DragOverlay. Das gezogene Element in der Liste wird zu einem halbtransparenten Platzhalter (mithilfe von isDragging), während DragOverlay eine vollständig sichtbare, erhöhte Kopie rendert, die dem Cursor folgt. Dieser Ansatz vermeidet visuelle Sprünge, bei denen das gezogene Element zwischen Positionen wechselt.

Vertikale und horizontale Listen

SortableContext funktioniert gleichermaßen gut für vertikale Listen (Aufgabenboards, To-do-Listen) und horizontale Listen (Registerleisten, Bildkarussells). Wechseln Sie zwischen den Strategien, indem Sie die strategy-Prop ändern. Sie können SortableContext sogar für ein Rasterlayout mit rectSortingStrategy verwenden, das anhand der Ziehposition die nächstgelegene Rasterzelle berechnet.

arrayMove in onDragEnd

Welche Argumente übernimmt arrayMove, wenn die Funktion innerhalb von onDragEnd aufgerufen wird, um eine sortierbare Liste neu anzuordnen?

Lektionsrückblick: SortableContext

SortableContext umschließt eine Liste mit änderbarer Reihenfolge und benötigt ein items-Array mit eindeutigen IDs sowie eine Strategie (vertikal, horizontal oder Raster). Jedes Element verwendet useSortable anstelle von useDraggable und erhält dadurch isDragging und overIndex. In onDragEnd ordnet arrayMove(items, oldIndex, newIndex) das Array neu an. CSS-Transitions auf der transform-Eigenschaft animieren verschobene Elemente flüssig.

Häufig gestellte Fragen

Ist die Lektion „SortableContext für umsortierbare Listen“ kostenlos?

Ja — der vollständige Text von „SortableContext für umsortierbare Listen“ 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 „SortableContext für umsortierbare Listen“?

SortableContext und useSortable verwenden, um umsortierbare Listen mit flüssigen Animationen zu 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 3 von 4.

Wie lange dauert die Lektion „SortableContext für umsortierbare Listen“?

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