MotionHighlight
Pestañas, controles segmentados o navegación a partir de datos, con un resaltado que viaja hasta la selección.
WebReact NativeSelección y paginación
Pruébalo
Preparando el ejemplo…
Uso mínimo
<MotionHighlight
items={['Overview', 'Activity', 'Settings']}
value={tab}
onValueChange={setTab}
hover
/>;Lo que resuelve por ti
- Un único resaltado se mueve y cambia de tamaño entre elementos; dale estilo con
highlightClassName. - Los elementos vienen de
items, las keys degetKeyy las etiquetas derenderItem. hoverhace que siga al puntero y vuelva a la selección.- Los elementos pueden ocupar varias filas y el resaltado los sigue.
- La carga de fuentes y los cambios de layout se vuelven a medir automáticamente.
Úsalo para
- Pestañas de una página.
- Una barra de filtros.
- Un control segmentado en un formulario de ajustes.
Props
| Prop | Tipo | Por defecto | Descripción |
|---|---|---|---|
items | readonly T[] | —obligatoria | Tu array de datos. |
value | key | null | —obligatoria | Key del elemento resaltado; null oculta el resaltado. |
onValueChange | (key, item) => void | Se ejecuta con la key y el elemento cuando se pulsa un elemento. | |
getKey | (item) => string | number | item.id | Devuelve una key única y estable para un elemento. Por defecto item.id, o el propio elemento si es una cadena o un número. |
renderItem | (item, { selected, index }) => ReactNode | item.label | Dibuja un elemento; recibe si está seleccionado. |
hover | boolean | false | Sigue al puntero sobre los elementos y vuelve a value al salir (web). |
itemAs | element | 'button' | El elemento de cada ítem. |
itemClassName | string | Clase para el elemento de cada ítem; itemStyle fija su estilo en línea. | |
highlightClassName | string | Clase para el resaltado; highlightStyle fija su estilo en línea. | |
transition | Transition | spring | Una curva de tiempo { duration, easing } o un resorte { tempo: 'spring', spring }. Los resortes conservan su impulso cuando se interrumpen. |
Las demás props van al elemento renderizado, así que className, style y los manejadores de eventos funcionan como siempre.
Web y React Native
Cada elemento se renderiza como un button por defecto (itemAs lo cambia); al pulsarlo se llama a onValueChange(key, item).
En React Native los elementos son Pressable; la posición va con el driver nativo y el tamaño con una vista anidada controlada por JavaScript.
Se usa en estos ejemplos
- Bandeja de entradaPestañas de filtro con recuentos en vivo, filas que se pueden apartar deslizando y una lista que cierra el hueco.
MotionHighlightMotionListMotionSwipeMotionNumber - Feed de fotosPasa fotos deslizando, salta con las miniaturas, abre cualquier foto a pantalla completa y sube sus detalles.
MotionPagerMotionHighlightMotionZoomMotionSheet