SortableContext para listas reordenáveis
Use SortableContext e useSortable para criar listas reordenáveis com animações suaves.
SortableContext para listas reordenáveis é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
O que SortableContext faz
SortableContext é um componente especializado do dnd-kit que envolve uma lista reordenável. Enquanto useDraggable e useDroppable lidam com operações arbitrárias de arrastar e soltar, SortableContext trata especificamente do caso em que os itens de uma lista precisam ser reordenados ao arrastá-los para uma nova posição.
A propriedade de itens
SortableContext exige uma propriedade items: uma matriz de IDs exclusivos, que podem ser strings ou números, correspondentes aos IDs usados nos componentes classificáveis filhos. A ordem dessa matriz define a ordem atual dos itens. Quando você atualiza essa matriz no estado, a lista é renderizada novamente na nova ordem.
Estratégias de ordenação
SortableContext aceita uma propriedade strategy que controla como os itens são ordenados. verticalListSortingStrategy é usada para listas verticais e calcula o ponto de inserção com base na posição vertical. horizontalListSortingStrategy é usada para listas horizontais. rectSortingStrategy é usada para grades. Escolha a estratégia que corresponde ao seu layout.
Gancho useSortable
Dentro de SortableContext, cada item da lista usa o gancho useSortable({ id }) em vez de useDraggable. useSortable é um superconjunto de useDraggable: ele retorna os mesmos atributos, ouvintes, setNodeRef e transformação, além de valores adicionais específicos da ordenação, como isDragging e overIndex.
isDragging para o estado visual
O valor isDragging de useSortable é verdadeiro enquanto o item está sendo arrastado ativamente. Normalmente, você o usa para reduzir a opacidade ou adicionar um estilo de espaço reservado ao item original da lista enquanto ele é arrastado. Esse espaço visual mostra ao usuário onde o item está atualmente na lista.
O utilitário arrayMove
dnd-kit exporta um utilitário arrayMove(array, fromIndex, toIndex) de @dnd-kit/sortable. Ele retorna uma nova matriz com o item de fromIndex movido para toIndex. Essa é a maneira padrão de atualizar a matriz do estado quando uma operação de arrastar para ordenar é concluída.
Implementando onDragEnd para ordenação
Na função de retorno onDragEnd do DndContext para uma lista classificável, encontre os índices antigo e novo usando items.indexOf(event.active.id) e items.indexOf(event.over?.id). Se ambos os índices forem válidos e diferentes, chame setItems(arrayMove(items, oldIndex, newIndex)) para reordenar a matriz.
Animação suave dos itens deslocados
Quando um item é arrastado, os outros itens da lista se animam para novas posições, mostrando onde o item arrastado será colocado. useSortable fornece uma transformação CSS para cada item que não está sendo arrastado, deslocando-o para abrir espaço. Adicionar uma transição CSS a essa transformação cria uma animação de movimento suave.
Transição para um movimento suave
Aplique uma transição CSS à propriedade de transformação dos itens classificáveis: transition: isDragging ? undefined : transform ? 'transform 200ms ease' : undefined. Quando um item está sendo arrastado, não é necessária nenhuma transição (ele deve acompanhar o cursor diretamente). Quando é deslocado, uma transição cria uma animação de deslizamento suave.
Combinando com DragOverlay
Para obter a melhor experiência do usuário, combine SortableContext com DragOverlay. O item arrastado na lista se torna um espaço reservado semitransparente (usando isDragging), enquanto DragOverlay renderiza uma cópia sólida e elevada que acompanha o cursor. Essa abordagem evita falhas visuais em que o item arrastado salta entre posições.
Listas verticais e horizontais
SortableContext funciona igualmente bem para listas verticais (quadros de tarefas, listas de afazeres) e listas horizontais (barras de abas, carrosséis de imagens). Alterne entre as estratégias alterando a propriedade de estratégia. Você pode até usá-lo para um layout de grade com rectSortingStrategy, que calcula a célula de grade mais próxima com base na posição do item arrastado.
arrayMove em onDragEnd
Quais argumentos arrayMove recebe quando é chamada dentro de onDragEnd para reordenar uma lista classificável?
Recapitulação da lição: SortableContext
SortableContext envolve uma lista reordenável e exige uma matriz de itens com IDs exclusivos e uma estratégia (vertical, horizontal ou de grade). Cada item usa useSortable em vez de useDraggable, obtendo isDragging e overIndex. Em onDragEnd, arrayMove(items, oldIndex, newIndex) reordena a matriz. As transições CSS aplicadas à transformação animam suavemente os itens deslocados.
Perguntas Frequentes
A aula “SortableContext para listas reordenáveis” é grátis?
Sim — o texto completo de “SortableContext para listas reordenáveis” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “SortableContext para listas reordenáveis”?
Use SortableContext e useSortable para criar listas reordenáveis com animações suaves. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “SortableContext para listas reordenáveis”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Arquitetura do dnd-kit e design priorizando a acessibilidade
- DndContext, useDraggable e useDroppable
- SortableContext para listas reordenáveis
- Sobreposições personalizadas de arraste e DnD entre vários contêineres