MotionList
Uma lista a partir de dados que anima só o que mudou.
WebReact NativeListas
Experimente
Preparando o exemplo…
Uso mais curto
<MotionList as="ul" items={todos} renderItem={(todo) => <TodoRow todo={todo} />} />;O que ele resolve para você
- Itens novos entram com escalonamento limitado enquanto os itens intocados ficam parados.
- Itens removidos saem do fluxo e se animam para fora onde estavam, enquanto o resto desliza para fechar o espaço.
- Itens reordenados deslizam até a nova posição.
- Movimentos interrompidos por outra mudança mantêm a velocidade.
present={false}anima a saída de todos os itens, eplayKeyrepete a entrada.
Use para
- Uma lista de tarefas.
- Resultados de busca filtrados.
- Um carrinho de compras.
Props
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
items | readonly T[] | —obrigatória | Seu array de dados. |
getKey | (item) => string | number | item.id | Retorna uma key única e estável para um item. Por padrão item.id, ou o próprio item para strings e números. |
renderItem | (item, index) => ReactNode | item.label | Desenha um item. |
as | element | 'div' | O elemento a renderizar. |
itemAs | element | 'li' | 'div' | O elemento de cada item. |
itemClassName | string | Classe do elemento de cada item; itemStyle define o estilo inline. | |
effect | 'rise' | 'fade' | 'scale' | 'slide' | 'rise' | Como os itens entram e saem. |
distance | number | 16 | Percurso de rise e slide, em pixels. |
stagger | number | 40 | Milissegundos entre os itens que entram. |
order | 'forward' | 'reverse' | 'forward' | Direção do escalonamento. |
present | boolean | true | false anima a saída de todos os itens mantendo o layout; true os traz de volta. |
initial | boolean | true | Reproduz a entrada quando a lista é montada. |
playKey | string | number | Mudá-lo repete a entrada. | |
transition | Transition | spring | Transição dos itens que entram e saem. |
layoutTransition | Transition | spring | Transição dos itens que deslizam até novas posições. |
As outras props vão para o elemento renderizado, então className, style e handlers de eventos funcionam normalmente.
Web e React Native
Cada item ganha um elemento envolvente (li dentro de ul ou ol, senão div; itemAs muda isso) estilizado com itemClassName.
As keys precisam ser únicas. Envolva a lista em MotionHeight para animar também a altura total.
Usado nestes exemplos
- Resposta de chatSugestões que se recolhem, uma resposta que chega em ritmo constante e uma linha de status que troca.
MotionStreamMotionListMotionSwapMotionHeight - Resumo do pedidoQuantidades, subtotais e o total rolam quando o carrinho muda; o aviso do cupom entra e sai; pagar exige segurar de propósito.
MotionListMotionNumberMotionPresenceMotionHold - Caixa de entradaAbas de filtro com contagens ao vivo, linhas que você desliza para fora e uma lista que fecha o espaço.
MotionHighlightMotionListMotionSwipeMotionNumber