Todos los componentes

MotionList

Una lista a partir de datos que anima solo lo que cambió.

WebReact NativeListas

Pruébalo

Preparando el ejemplo…

Uso mínimo

Todos.jsx
<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, y playKey repite la entrada.

Úsalo para

  • Una lista de tareas.
  • Resultados de búsqueda filtrados.
  • Un carrito de la compra.

Props

PropTipoPor defectoDescripción
itemsreadonly T[]—obligatoriaTu array de datos.
getKey(item) => string | numberitem.idDevuelve 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) => ReactNodeitem.labelDibuja un elemento.
aselement'div'El elemento que se renderiza.
itemAselement'li' | 'div'El elemento de cada ítem.
itemClassNamestringClase 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.
distancenumber16Recorrido de rise y slide en píxeles.
staggernumber40Milisegundos entre los elementos que entran.
order'forward' | 'reverse''forward'Sentido del escalonado.
presentbooleantruefalse anima la salida de todos los elementos manteniendo el layout; true los trae de vuelta.
initialbooleantrueReproduce la entrada cuando la lista se monta.
playKeystring | numberCambiarlo repite la entrada.
transitionTransitionspringTransición de los elementos que entran y salen.
layoutTransitionTransitionspringTransició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

Buscar

Escribe para buscar en la documentación.