Drag and drop in React: lista ordinabile e kanban board

Guida al drag and drop in React

Drag and drop in React: lista ordinabile e kanban (dnd-kit) | We.Inc

Crea una lista ordinabile e una kanban board in React con dnd-kit, oppure con gli eventi drag HTML nativi. Board dal vivo nella pagina, spostamenti da tastiera inclusi, codice da copiare.

Per la maggior parte delle app React, dnd-kit è la scelta solida più semplice: un toolkit con licenza MIT che include sensori per puntatore, touch e tastiera. Installa @dnd-kit/react, avvolgi l'area in DragDropProvider, assegna a ogni card useSortable con un id, un index e un group, poi aggiorna lo stato in onDragEnd. Anche gli eventi drag HTML nativi funzionano, ma richiedono più codice scritto a mano.

Due modi per aggiungere il drag and drop

Qui sotto trovi una board funzionante su cui puoi trascinare le card subito, con pulsanti freccia per chi non usa il mouse. Più in basso c'è il codice dnd-kit per la stessa lista ordinabile e la board a più colonne, più la versione con i semplici eventi del browser per confronto.

Domande frequenti

react-beautiful-dnd è ancora una buona scelta?

Atlassian ha archiviato il repository di react-beautiful-dnd e consiglia il suo successore, Pragmatic drag and drop. Per i nuovi progetti React, dnd-kit e Pragmatic drag and drop sono le opzioni mantenute attivamente da confrontare.

Qual è la differenza tra @dnd-kit/core e @dnd-kit/react?

@dnd-kit/core con @dnd-kit/sortable è la coppia di pacchetti React di lunga data. @dnd-kit/react è il nuovo adattatore costruito su un core indipendente dal framework, che alimenta anche gli adattatori per Vue, Svelte e Solid. Il nuovo codice può partire da @dnd-kit/react, come fa la documentazione attuale.

Perché il mio evento drop non scatta mai con l'API HTML?

Una destinazione di drop deve chiamare event.preventDefault() nel suo handler dragover. Senza quella chiamata il browser considera l'elemento una destinazione non valida e l'evento drop non viene mai inviato.

Come rendo accessibile il drag and drop?

Rendi ogni card focalizzabile, offri un modo da tastiera per prenderla, spostarla e rilasciarla, e annuncia il risultato in una live region. dnd-kit include di serie un sensore per tastiera e il supporto all'accessibilità; con l'API nativa devi aggiungere tutto tu.

Prima lo stato, poi il trascinamento

Perché l'API nativa è più difficile di quanto sembri

Lista ordinabile con dnd-kit

Installa con npm install @dnd-kit/react. Ogni elemento conosce il proprio index; dopo un drop, source.initialIndex e source.index ti dicono dove si è spostato.

SortableList.jsx

Riordina un array di nomi di attività. Copiare e poi usare splice lascia intatto lo stato precedente.

Kanban board con dnd-kit

Aggiungi un group a useSortable così le card possono passare da una colonna all'altra. source.initialGroup e source.group sono il nome della colonna vecchia e di quella nuova.

KanbanBoard.jsx

Tre colonne contenute in un unico oggetto. Uno spostamento dentro una colonna la riordina; uno spostamento tra colonne rimuove la card da un array e la inserisce nell'altro.

La stessa idea con gli eventi drag HTML nativi

Nessun pacchetto necessario. Nota il preventDefault in onDragOver: senza di esso il drop non scatta mai.

NativeColumns.jsx

Sposta una card in fondo alla colonna su cui viene rilasciata. Riordinare dentro una colonna richiederebbe logica aggiuntiva sugli indici.

Riferimento agli eventi drag HTML

I sette eventi di trascinamento e dove vengono emessi

Da fare

In corso

Fatto

Logo

Tabella prezzi

Modulo di contatto

Sezione hero

Dominio

{card} spostata in {column}, posizione {n}

Provala: una kanban board funzionante

Trascina le card tra Da fare, In corso e Fatto, oppure usa i pulsanti di spostamento su ogni card.

Colonna {column}

Sposta {card} in su

Sposta {card} in giù

Sposta {card} in {column}

colonna precedente

colonna successiva

Board ripristinata

Ripristina board

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito