React drag and drop: sorteerbare lijst en kanbanbord

Gids voor React drag and drop

React drag and drop: sorteerbare lijst en kanban (dnd-kit) | We.Inc

Bouw een sorteerbare lijst en een kanbanbord in React met dnd-kit, of met de native HTML drag-events. Live bord op de pagina, inclusief verplaatsen met het toetsenbord, kopieerbare code.

Voor de meeste React-apps is dnd-kit de eenvoudigste degelijke keuze: een toolkit onder MIT-licentie met ingebouwde sensoren voor pointer, touch en toetsenbord. Installeer @dnd-kit/react, omhul het gebied met DragDropProvider, geef elke kaart useSortable met een id, index en group, en werk daarna uw state bij in onDragEnd. De native HTML drag-events werken ook, met meer handgeschreven code.

Twee manieren om drag and drop toe te voegen

Hieronder staat een werkend bord waarop u nu meteen kaarten kunt slepen, met pijlknoppen voor iedereen die geen muis gebruikt. Daaronder vindt u de dnd-kit-code voor dezelfde sorteerbare lijst en hetzelfde bord met meerdere kolommen, plus de versie met gewone browserevents ter vergelijking.

Veelgestelde vragen

Is react-beautiful-dnd nog een goede keuze?

Atlassian heeft de repository van react-beautiful-dnd gearchiveerd en raadt de opvolger aan, Pragmatic drag and drop. Voor nieuw React-werk zijn dnd-kit en Pragmatic drag and drop de actief onderhouden opties om te vergelijken.

Wat is het verschil tussen @dnd-kit/core en @dnd-kit/react?

@dnd-kit/core met @dnd-kit/sortable is het React-pakketpaar dat al lang bestaat. @dnd-kit/react is de nieuwere adapter, gebouwd op een framework-onafhankelijke kern die ook de adapters voor Vue, Svelte en Solid aandrijft. Nieuwe code kan beginnen met @dnd-kit/react, zoals de huidige documentatie doet.

Waarom wordt mijn drop-event nooit uitgevoerd met de HTML API?

Een droptarget moet event.preventDefault() aanroepen in de dragover-handler. Zonder die aanroep behandelt de browser het element als een ongeldig doel en wordt het drop-event nooit verstuurd.

Hoe maak ik drag and drop toegankelijk?

Maak elke kaart focusbaar, bied een manier om hem met het toetsenbord op te pakken, te verplaatsen en neer te zetten, en meld het resultaat in een live region. dnd-kit levert direct een toetsenbordsensor en toegankelijkheidsondersteuning mee; met de native API voegt u dat allemaal zelf toe.

Eerst de state, dan het slepen

Waarom de native API lastiger is dan hij lijkt

Sorteerbare lijst met dnd-kit

Installeer met npm install @dnd-kit/react. Elk item kent zijn eigen index; na een drop vertellen source.initialIndex en source.index waarheen het is verplaatst.

SortableList.jsx

Wijzigt de volgorde van een array met taaknamen. Eerst kopiëren en dan splice laat de oude state onaangeroerd.

Kanbanbord met dnd-kit

Voeg een group toe aan useSortable zodat kaarten tussen kolommen kunnen reizen. source.initialGroup en source.group zijn de oude en nieuwe kolomnamen.

KanbanBoard.jsx

Drie kolommen in één object. Verplaatsen binnen een kolom wijzigt de volgorde; verplaatsen naar een andere kolom haalt de kaart uit de ene array en voegt hem in de andere in.

Hetzelfde idee met native HTML drag-events

Geen pakket nodig. Let op de preventDefault in onDragOver: zonder die aanroep wordt de drop nooit uitgevoerd.

NativeColumns.jsx

Verplaatst een kaart naar het einde van de kolom waarop hij wordt neergezet. Voor het wijzigen van de volgorde binnen een kolom is extra indexlogica nodig.

Overzicht van HTML drag-events

De zeven drag-events en waar ze worden afgevuurd

Te doen

Bezig

Klaar

Logo

Prijstabel

Contactformulier

Herosectie

Domein

{card} verplaatst naar {column}, positie {n}

Probeer het: een werkend kanbanbord

Sleep kaarten tussen Te doen, Bezig en Klaar, of gebruik de verplaatsknoppen op elke kaart.

Kolom {column}

{card} omhoog verplaatsen

{card} omlaag verplaatsen

{card} verplaatsen naar {column}

vorige kolom

volgende kolom

Bord teruggezet

Bord terugzetten

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap