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.
npm install @kkwaenggwari/animated-chorusMedido 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
MotionNumberse renderiza cuando cambia el valor, nunca mientras rueda. - 11Commits de React para 3000 caracteres en streaming
MotionStreamañ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.idpor 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 componentesNúmeros y texto
Contenido y tamaño
Selección y paginación
Listas
Gestos
Superposiciones
Progreso
Combinados
Pantallas completas que combinan varios componentes, cada una con sus ajustes fuera del ejemplo.
Todos los 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 - Feed de fotosPasa fotos deslizando, salta con las miniaturas, abre cualquier foto a pantalla completa y sube sus detalles.
MotionPagerMotionHighlightMotionZoomMotionSheet
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.
// 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} />
</>
);
}| Parte | Web | React Native |
|---|---|---|
| Transforms y opacidad | Web Animations API, resortes muestreados analíticamente | Animated con el driver nativo |
| Ancho y alto | Web Animations API | Animated con el driver de JS, porque es layout |
| Texto en streaming | Caracteres añadidos con fundido; unos pocos renders de React por segundo | Un Text real, que aparece sin fundido |
| Hojas y zoom | Un dialog nativo en la capa superior | Un 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