Drag and drop React : liste triable et tableau kanban

Guide du drag and drop en React

Drag and drop React : liste triable et kanban (dnd-kit) | We.Inc

Créez une liste triable et un tableau kanban en React avec dnd-kit, ou avec les événements de glisser-déposer HTML natifs. Tableau en direct sur la page, déplacements au clavier inclus, code à copier.

Pour la plupart des applications React, dnd-kit est le choix solide le plus simple : une boîte à outils sous licence MIT avec des capteurs pointeur, tactile et clavier intégrés. Installez @dnd-kit/react, enveloppez la zone dans DragDropProvider, donnez à chaque carte useSortable avec un id, un index et un group, puis mettez à jour votre state dans onDragEnd. Les événements de glisser-déposer HTML natifs fonctionnent aussi, avec davantage de code écrit à la main.

Deux façons d'ajouter le glisser-déposer

Ci-dessous se trouve un tableau fonctionnel sur lequel vous pouvez déplacer des cartes dès maintenant, avec des boutons fléchés pour qui n'utilise pas de souris. En dessous, vous trouverez le code dnd-kit pour la même liste triable et le tableau à plusieurs colonnes, ainsi que la version avec les événements natifs du navigateur pour comparer.

Questions fréquentes

react-beautiful-dnd est-il toujours un bon choix ?

Atlassian a archivé le dépôt react-beautiful-dnd et recommande son successeur, Pragmatic drag and drop. Pour un nouveau projet React, dnd-kit et Pragmatic drag and drop sont les options activement maintenues à comparer.

Quelle est la différence entre @dnd-kit/core et @dnd-kit/react ?

@dnd-kit/core avec @dnd-kit/sortable est le duo de paquets React historique. @dnd-kit/react est l'adaptateur plus récent, construit sur un cœur indépendant du framework qui alimente aussi les adaptateurs Vue, Svelte et Solid. Un nouveau code peut partir de @dnd-kit/react, comme le fait la documentation actuelle.

Pourquoi mon événement drop ne se déclenche-t-il jamais avec l'API HTML ?

Une cible de dépôt doit appeler event.preventDefault() dans son gestionnaire dragover. Sans cet appel, le navigateur considère l'élément comme une cible invalide et l'événement drop n'est jamais envoyé.

Comment rendre le glisser-déposer accessible ?

Rendez chaque carte focalisable, proposez un moyen au clavier de la saisir, la déplacer et la déposer, et annoncez le résultat dans une live region. dnd-kit fournit d'emblée un capteur clavier et un support de l'accessibilité ; avec l'API native, vous ajoutez tout cela vous-même.

D'abord le state, ensuite le glissement

Pourquoi l'API native est plus difficile qu'il n'y paraît

Liste triable avec dnd-kit

Installez avec npm install @dnd-kit/react. Chaque élément connaît son propre index ; après un dépôt, source.initialIndex et source.index vous indiquent où il a été déplacé.

SortableList.jsx

Réordonne un tableau de noms de tâches. Le principe copier puis splice laisse l'ancien state intact.

Tableau kanban avec dnd-kit

Ajoutez un group à useSortable pour que les cartes puissent passer d'une colonne à l'autre. source.initialGroup et source.group sont l'ancien et le nouveau nom de colonne.

KanbanBoard.jsx

Trois colonnes stockées dans un seul objet. Un déplacement dans une colonne la réordonne ; un déplacement vers une autre retire la carte d'un tableau et l'insère dans l'autre.

La même idée avec les événements HTML natifs

Aucun paquet nécessaire. Notez le preventDefault dans onDragOver : sans lui, le drop ne se déclenche jamais.

NativeColumns.jsx

Déplace une carte à la fin de la colonne sur laquelle elle est déposée. Réordonner à l'intérieur d'une colonne demanderait une logique d'index supplémentaire.

Référence des événements de glissement HTML

Les sept événements de glissement et où ils se déclenchent

À faire

En cours

Terminé

Logo

Grille tarifaire

Formulaire de contact

Section hero

Domaine

{card} déplacée vers {column}, position {n}

Essayez : un tableau kanban fonctionnel

Faites glisser les cartes entre À faire, En cours et Terminé, ou utilisez les boutons de déplacement de chaque carte.

Colonne {column}

Monter {card}

Descendre {card}

Déplacer {card} vers {column}

colonne précédente

colonne suivante

Tableau réinitialisé

Réinitialiser le tableau

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site