MotionList
Una lista a partir de datos que anima solo lo que cambió.
WebReact NativeListas
Pruébalo
Preparando el ejemplo…
Uso mínimo
<MotionList as="ul" items={todos} renderItem={(todo) => <TodoRow todo={todo} />} />;Lo que resuelve por ti
- Los elementos nuevos entran con un escalonado acotado mientras los que no cambian se quedan quietos.
- Los elementos eliminados salen del flujo y se animan hacia fuera donde estaban mientras el resto se desliza para cerrar el hueco.
- Los elementos reordenados se deslizan a su nueva posición.
- Los movimientos interrumpidos por otro cambio conservan su velocidad.
present={false}anima la salida de todos los elementos, yplayKeyrepite la entrada.
Úsalo para
- Una lista de tareas.
- Resultados de búsqueda filtrados.
- Un carrito de la compra.
Props
| Prop | Tipo | Por defecto | Descripción |
|---|---|---|---|
items | readonly T[] | —obligatoria | Tu array de datos. |
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, index) => ReactNode | item.label | Dibuja un elemento. |
as | element | 'div' | El elemento que se renderiza. |
itemAs | element | 'li' | 'div' | El elemento de cada ítem. |
itemClassName | string | Clase para el elemento de cada ítem; itemStyle fija su estilo en línea. | |
effect | 'rise' | 'fade' | 'scale' | 'slide' | 'rise' | Cómo entran y salen los elementos. |
distance | number | 16 | Recorrido de rise y slide en píxeles. |
stagger | number | 40 | Milisegundos entre los elementos que entran. |
order | 'forward' | 'reverse' | 'forward' | Sentido del escalonado. |
present | boolean | true | false anima la salida de todos los elementos manteniendo el layout; true los trae de vuelta. |
initial | boolean | true | Reproduce la entrada cuando la lista se monta. |
playKey | string | number | Cambiarlo repite la entrada. | |
transition | Transition | spring | Transición de los elementos que entran y salen. |
layoutTransition | Transition | spring | Transición de los elementos que se deslizan a su nueva posición. |
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 recibe un elemento envolvente (li dentro de ul u ol, y si no, div; itemAs lo cambia) con estilo mediante itemClassName.
Las keys deben ser únicas. Envuelve la lista en MotionHeight para animar también su altura total.
Se usa en estos ejemplos
- Respuesta de chatSugerencias que se pliegan, una respuesta que llega a un ritmo constante y una línea de estado que se intercambia.
MotionStreamMotionListMotionSwapMotionHeight - Resumen del pagoLas cantidades, los subtotales y el total ruedan cuando cambia el carrito; el aviso del cupón entra y sale; pagar requiere mantener pulsado a propósito.
MotionListMotionNumberMotionPresenceMotionHold - Bandeja de entradaPestañas de filtro con recuentos en vivo, filas que se pueden apartar deslizando y una lista que cierra el hueco.
MotionHighlightMotionListMotionSwipeMotionNumber