React Academy · Lektion

SortableContext för omordningsbara listor

Använd SortableContext och useSortable för att bygga omordningsbara listor med mjuka animationer.

Lektion 3 av 413 steg

SortableContext för omordningsbara listor är en gratis lektion i React Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

Vad SortableContext gör

SortableContext är en specialiserad dnd-kit-komponent som omsluter en lista vars ordning kan ändras. Medan useDraggable och useDroppable hanterar godtycklig dra-och-släpp-funktionalitet hanterar SortableContext specifikt situationer där listobjekt behöver ordnas om genom att dras till en ny position.

Prop-en items

SortableContext kräver en items-prop: en array med unika ID:n av typen sträng eller tal som motsvarar ID:na i de underordnade sorterbara komponenterna. Arrayens ordning anger objektens aktuella ordning. När ni uppdaterar denna array i state renderas listan om i den nya ordningen.

Sorteringsstrategier

SortableContext accepterar en strategy-prop som styr hur objekten sorteras. verticalListSortingStrategy är avsedd för vertikala listor och beräknar infogningspunkten utifrån den vertikala positionen. horizontalListSortingStrategy är avsedd för horisontella listor. rectSortingStrategy är avsedd för rutnät. Välj den strategi som passar er layout.

Hooken useSortable

Inuti SortableContext använder varje listobjekt hooken useSortable({ id }) i stället för useDraggable. useSortable är en superset av useDraggable — den returnerar samma attributes, listeners, setNodeRef och transform, samt ytterligare värden som är specifika för sortering, till exempel isDragging och overIndex.

isDragging för visuellt tillstånd

Värdet isDragging från useSortable är true medan objektet aktivt dras. Vanligtvis använder ni det för att minska opaciteten eller lägga till en platshållarstil på originalobjektet i listan medan det dras. Det visuella mellanrummet visar användaren var objektet för närvarande befinner sig i listan.

Verktyget arrayMove

dnd-kit exporterar verktyget arrayMove(array, fromIndex, toIndex) från @dnd-kit/sortable. Det returnerar en ny array där objektet på fromIndex har flyttats till toIndex. Det här är standard sättet att uppdatera er state-array när en sorteringsdragning har slutförts.

Implementera onDragEnd för sortering

I callbacken onDragEnd i DndContext för en sorterbar lista hittar ni det gamla och det nya indexet med hjälp av items.indexOf(event.active.id) och items.indexOf(event.over?.id). Om båda indexen är giltiga och olika anropar ni setItems(arrayMove(items, oldIndex, newIndex)) för att ordna om arrayen.

Smidig animering av förskjutna objekt

När ett objekt dras animeras de andra objekten i listan till nya positioner för att visa var det dragna objektet kommer att hamna. useSortable tillhandahåller en CSS-transform för varje objekt som inte dras, så att det flyttas åt sidan. Om ni lägger till en CSS-transition för denna transform skapas en mjuk förflyttningsanimering.

Transition för smidig förflyttning

Tillämpa en CSS-transition på transform-egenskapen för sorterbara objekt: transition: isDragging ? undefined : transform ? 'transform 200ms ease' : undefined. När ett objekt dras behövs ingen transition eftersom det ska följa markören direkt. När andra objekt förskjuts skapar en transition en mjuk glidanimering.

Kombinera med DragOverlay

För bästa användarupplevelse kombinerar ni SortableContext med DragOverlay. Det dragna objektet i listan blir en halvtransparent platshållare med hjälp av isDragging, medan DragOverlay renderar en ogenomskinlig, upphöjd kopia som följer markören. På så sätt undviker ni visuella störningar där det dragna objektet hoppar mellan positioner.

Vertikala och horisontella listor

SortableContext fungerar lika bra för vertikala listor (uppgiftsbrädor och att-göra-listor) som för horisontella listor (flikrader och bildkaruseller). Byt strategi genom att ändra strategy-propen. Ni kan även använda den för en rutnätslayout med rectSortingStrategy, som beräknar den närmaste rutnätscellen utifrån dragningens position.

arrayMove i onDragEnd

Vilka argument tar arrayMove när den anropas inuti onDragEnd för att ordna om en sorterbar lista?

Lektionssammanfattning: SortableContext

SortableContext omsluter en lista vars ordning kan ändras och kräver en items-array med unika ID:n samt en strategi (vertikal, horisontell eller rutnätsbaserad). Varje objekt använder useSortable i stället för useDraggable och får då tillgång till isDragging och overIndex. I onDragEnd ordnar arrayMove(items, oldIndex, newIndex) om arrayen. CSS-transitioner på transform-egenskapen animerar förskjutna objekt på ett mjukt sätt.

Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”SortableContext för omordningsbara listor” gratis?

Ja – hela texten till ”SortableContext för omordningsbara listor” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”SortableContext för omordningsbara listor”?

Använd SortableContext och useSortable för att bygga omordningsbara listor med mjuka animationer. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”SortableContext för omordningsbara listor”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. dnd-kit-arkitektur och tillgänglighetsfokuserad design
  2. DndContext, useDraggable och useDroppable
  3. SortableContext för omordningsbara listor
  4. Anpassade dragöverlägg och DnD mellan flera behållare
← Tillbaka till React Academy