MotionHighlight
Abas, controles segmentados ou navegação a partir de dados, com um destaque que viaja até a seleção.
WebReact NativeSeleção e paginação
Experimente
Preparando o exemplo…
Uso mais curto
<MotionHighlight
items={['Overview', 'Activity', 'Settings']}
value={tab}
onValueChange={setTab}
hover
/>;O que ele resolve para você
- Um destaque se move e muda de tamanho entre os itens; estilize com
highlightClassName. - Os itens vêm de
items, as keys degetKeye os rótulos derenderItem. hoverfaz o destaque seguir o ponteiro e voltar para a seleção.- Os itens podem quebrar em várias linhas, e o destaque acompanha.
- O carregamento de fontes e as mudanças de layout são medidos de novo automaticamente.
Use para
- Abas de página.
- Uma barra de filtros.
- Um controle segmentado em um formulário de configurações.
Props
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
items | readonly T[] | —obrigatória | Seu array de dados. |
value | key | null | —obrigatória | Key do item destacado; null esconde o destaque. |
onValueChange | (key, item) => void | Roda com a key e o item quando um item é pressionado. | |
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, { selected, index }) => ReactNode | item.label | Desenha um item; recebe se ele está selecionado. |
hover | boolean | false | Segue o ponteiro sobre os itens e volta para value ao sair (web). |
itemAs | element | 'button' | O elemento de cada item. |
itemClassName | string | Classe do elemento de cada item; itemStyle define o estilo inline. | |
highlightClassName | string | Classe do destaque; highlightStyle define o estilo inline. | |
transition | Transition | spring | Uma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas. |
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 é renderizado como button por padrão (itemAs muda isso); apertá-lo chama onValueChange(key, item).
No React Native, os itens são Pressables; a posição roda no driver nativo e o tamanho em uma view aninhada controlada por JavaScript.
Usado nestes exemplos
- Caixa de entradaAbas de filtro com contagens ao vivo, linhas que você desliza para fora e uma lista que fecha o espaço.
MotionHighlightMotionListMotionSwipeMotionNumber - Feed de fotosDeslize pelas fotos, pule com as miniaturas, abra qualquer foto em tela cheia e puxe os detalhes para cima.
MotionPagerMotionHighlightMotionZoomMotionSheet