Todos os componentes

MotionReorder

Arraste para reordenar uma lista ou grade, com suporte a teclado.

WebReact NativeListas

Experimente

Preparando o exemplo…

Uso mais curto

Playlist.jsx
<MotionReorder
  items={tracks}
  onItemsChange={setTracks}
  layout="list"
  renderItem={(track) => track.title}
/>;

O que ele resolve para você

  • Os outros itens abrem espaço enquanto você arrasta (reorder="live") ou quando você solta (reorder="drop").
  • Layouts de lista e grade com columns e gap.
  • Movimento por teclado na web e ações de acessibilidade no React Native.
  • Controlado com items e onItemsChange ou não controlado com defaultItems.

Use para

  • Uma playlist.
  • Um backlog priorizado.
  • Uma grade de fotos.

Props

PropTipoPadrãoDescrição
itemsreadonly T[]Os itens, quando você controla a ordem.
defaultItemsreadonly T[][]Itens iniciais, quando o componente guarda a ordem.
onItemsChange(items, { reason, key }) => voidRoda com a nova ordem e se ela veio de um arraste, de soltar ou do teclado.
getKey(item) => string | numberitemRetorna uma key única para um item. Por padrão, o próprio item.
renderItem(item, { index, dragging }) => ReactNodeitem.labelDesenha um item; recebe o índice e se ele está sendo arrastado.
reorder'live' | 'drop''live'live move os outros itens durante o arraste; drop espera você soltar.
layout'list' | 'grid''grid'list ou grid.
columnsnumber3Colunas de uma grade.
gapnumber12Espaço entre os itens, em pixels.
disabledbooleanfalseDesliga o arraste.
durationnumber260Milissegundos para os itens que abrem espaço.
itemClassNamestringClasse do elemento de cada item; itemStyle define o estilo inline.

As outras props vão para o elemento renderizado, então className, style e handlers de eventos funcionam normalmente.

Web e React Native

onItemsChange(items, { reason }) diz se uma mudança veio de um arraste, de soltar ou do teclado.

No React Native valem as mesmas props, e a reordenação também é oferecida como ações de acessibilidade.

Pesquisar

Digite para pesquisar na documentação.