Drag and drop no React: lista ordenável e quadro kanban

Guia de drag and drop no React

Drag and drop no React: lista ordenável e kanban (dnd-kit) | We.Inc

Crie uma lista ordenável e um quadro kanban no React com dnd-kit ou com os eventos nativos de arrastar do HTML. Quadro ao vivo na página, movimentos por teclado incluídos e código para copiar.

Para a maioria dos apps React, o dnd-kit é a escolha sólida mais simples: um toolkit com licença MIT que já traz sensores de ponteiro, toque e teclado. Instale o @dnd-kit/react, envolva a área em DragDropProvider, dê a cada card um useSortable com id, index e group, e depois atualize o seu state no onDragEnd. Os eventos nativos de arrastar do HTML também funcionam, mas com mais código escrito à mão.

Duas formas de adicionar drag and drop

Abaixo há um quadro funcionando em que você pode arrastar os cards agora mesmo, com botões de seta para quem não usa mouse. Logo depois, você encontra o código com dnd-kit para a mesma lista ordenável e para o quadro com várias colunas, além da versão com os eventos simples do navegador para comparar.

Perguntas frequentes

O react-beautiful-dnd ainda é uma boa escolha?

A Atlassian arquivou o repositório do react-beautiful-dnd e recomenda o sucessor, o Pragmatic drag and drop. Para projetos React novos, o dnd-kit e o Pragmatic drag and drop são as opções com manutenção ativa para comparar.

Qual é a diferença entre @dnd-kit/core e @dnd-kit/react?

O @dnd-kit/core com o @dnd-kit/sortable é a dupla de pacotes React mais antiga. O @dnd-kit/react é o adaptador mais novo, construído sobre um núcleo independente de framework que também alimenta os adaptadores para Vue, Svelte e Solid. Código novo pode começar com o @dnd-kit/react, como faz a documentação atual.

Por que o meu evento drop nunca dispara com a API do HTML?

Um alvo de drop precisa chamar event.preventDefault() no handler de dragover. Sem essa chamada, o navegador trata o elemento como um alvo inválido e o evento drop nunca é enviado.

Como deixar o drag and drop acessível?

Faça cada card receber foco, ofereça um jeito de pegar, mover e soltar pelo teclado e anuncie o resultado em uma live region. O dnd-kit já vem com sensor de teclado e suporte a acessibilidade; com a API nativa, você mesmo precisa adicionar tudo isso.

Primeiro o state, depois o arraste

Por que a API nativa é mais difícil do que parece

Lista ordenável com dnd-kit

Instale com npm install @dnd-kit/react. Cada item sabe o próprio índice; depois de um drop, source.initialIndex e source.index dizem para onde ele foi.

SortableList.jsx

Reordena um array de nomes de tarefas. Copiar e depois aplicar o splice mantém o state antigo intacto.

Quadro kanban com dnd-kit

Adicione um group ao useSortable para que os cards possam passar de uma coluna para outra. source.initialGroup e source.group são os nomes da coluna antiga e da nova.

KanbanBoard.jsx

Três colunas guardadas em um único objeto. Mover dentro de uma coluna a reordena; mover entre colunas tira o card de um array e o insere no outro.

A mesma ideia com os eventos nativos de arrastar do HTML

Nenhum pacote necessário. Repare no preventDefault em onDragOver: sem ele, o drop nunca dispara.

NativeColumns.jsx

Move um card para o fim da coluna em que ele é solto. Reordenar dentro de uma coluna exigiria lógica extra de índices.

Referência dos eventos de arrastar do HTML

Os sete eventos de arrastar e onde eles disparam

A fazer

Fazendo

Feito

Logo

Tabela de preços

Formulário de contato

Seção hero

Domínio

{card} movido para {column}, posição {n}

Experimente: um quadro kanban funcionando

Arraste os cards entre A fazer, Fazendo e Feito, ou use os botões de mover em cada card.

Coluna {column}

Mover {card} para cima

Mover {card} para baixo

Mover {card} para {column}

coluna anterior

próxima coluna

Quadro reiniciado

Reiniciar quadro

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site