React · React Native · 16 componentes

Interacciones difíciles, ya terminadas.

Animated Chorus es un conjunto de componentes de animación para las interacciones que cuesta hacer bien a mano: números que ruedan, texto en streaming, cambios que redimensionan, hojas, paginadores, acciones al deslizar y listas que animan solo lo que cambió. Una etiqueta y tus datos. Sin provider ni configuración.

Instalar
npm install @kkwaenggwari/animated-chorus

Medido en esta build

Chrome, 2026-09-28. Todas las condiciones y muestras están en la guía de rendimiento. Cómo se midió

  • 28.0KBKB gzip para los 16 exports

    Toda la entrada web, minificada. React es la única dependencia peer.

  • 0Callbacks de fotograma de JS mientras anima

    Un número, una altura y un resaltado cambiando a la vez: el navegador reproduce las 12 animaciones.

  • 1Commit de React por cambio de valor

    MotionNumber se renderiza cuando cambia el valor, nunca mientras rueda.

  • 11Commits de React para 3000 caracteres en streaming

    MotionStream añade caracteres directamente y los incorpora a React unas pocas veces por segundo.

01Lo más fácil

Una etiqueta y tus datos

Cada componente funciona por sí solo: sin provider, componente envolvente ni llamada de configuración. Las colecciones reciben items y renderItem, y tu layout, tu texto y tus estilos siguen siendo tuyos.

  • Importa un componente y pásale un valor. Esa es toda la integración.
  • Las listas, pestañas y paginadores leen tu array; las keys usan item.id por defecto.
  • El texto sigue siendo texto real: se ajusta, escala con la fuente y se puede seleccionar.
  • <MotionNumber value={total} />;
  • <MotionSwap value={status}>{label}</MotionSwap>;
  • <MotionHeight open={open}>{details}</MotionHeight>;
  • <MotionHighlight items={tabs} value={tab} onValueChange={setTab} />;
  • <MotionList items={tasks} renderItem={(task) => task.title} />;
  • <ProgressRing value={progress} />;

Seis componentes en vivo y la línea de código que hay detrás de cada uno.

Preparando el ejemplo…

02Lo más rápido

Lo reproduce el navegador. React se queda quieto.

En la web no hay librería de animación que cargar: los componentes ceden su movimiento a la Web Animations API, así que un número que rueda o un panel que cambia de tamaño no cuestan JavaScript por fotograma ni renders de React mientras se mueven.

  • 0 callbacks de fotograma de JS mientras se ejecutan 12 animaciones a la vez.
  • Un commit de React por cambio de valor, no uno por fotograma.
  • Texto en streaming: 11 commits de React para 3000 caracteres. El ejemplo de abajo cuenta sus propios renders.

Preparando el ejemplo…

03Lo más estable

Interrumpe lo que sea. Nunca salta.

Cada valor nuevo empieza desde lo que se ve en pantalla y los resortes conservan su velocidad, así que los clics rápidos, las ráfagas de datos y los cambios de sentido parecen intencionados. Cuando termina el movimiento, no queda nada en marcha.

  • Los números nunca se parten: las cifras que se quedan se desplazan mientras ruedan.
  • 200 valores nuevos con 5 ms de diferencia: después quedan 0 animaciones y el texto final exacto.
  • Seguro en React StrictMode. En una app de React Native en segundo plano, el movimiento se asienta en su estado final.

Preparando el ejemplo…

16 componentes, agrupados por lo que hacen

Números y texto, contenido que cambia de tamaño, selección, listas, gestos, superposiciones y progreso. Cada uno tiene un banco de pruebas en vivo con sus props al lado.

Todos los componentes

El mismo import en la web y en React Native

Metro elige la implementación nativa y los bundlers web, la del DOM. Cada plataforma reproduce el movimiento como mejor sabe.

App.jsx
// Web and React Native: the same import.
import { MotionNumber, MotionList } from '@kkwaenggwari/animated-chorus';

export function Score({ points, players }) {
  return (
    <>
      <MotionNumber value={points} />
      <MotionList items={players} renderItem={(player) => player.name} />
    </>
  );
}
ParteWebReact Native
Transforms y opacidadWeb Animations API, resortes muestreados analíticamenteAnimated con el driver nativo
Ancho y altoWeb Animations APIAnimated con el driver de JS, porque es layout
Texto en streamingCaracteres añadidos con fundido; unos pocos renders de React por segundoUn Text real, que aparece sin fundido
Hojas y zoomUn dialog nativo en la capa superiorUn Modal transparente; el botón de retroceso lo cierra

Empieza en dos minutos

Instala, importa un componente y pásale un valor.

npm install @kkwaenggwari/animated-chorus

Buscar

Escribe para buscar en la documentación.