React · React Native · 16 componenti

Interazioni difficili, già pronte.

Animated Chorus è un insieme di componenti di movimento per le interazioni difficili da fare bene a mano: numeri che scorrono, testo in streaming, scambi che si ridimensionano, sheet, pager, azioni con lo swipe e liste che animano solo ciò che è cambiato. Un tag e i tuoi dati. Niente provider, niente configurazione.

Installa
npm install @kkwaenggwari/animated-chorus

Misurato su questa build

Chrome, 2026-09-28. Tutte le condizioni e i campioni sono nella guida alle prestazioni. Come è stato misurato

  • 28.0KBKB gzip per tutti i 16 export

    L’intera entry web, minificata. React è l’unica peer dependency.

  • 0Callback di frame JS durante l’animazione

    Un numero, un’altezza e un’evidenziazione che cambiano insieme: il browser riproduce tutte le 12 animazioni.

  • 1Commit di React per ogni cambio di valore

    MotionNumber si renderizza quando il valore cambia, mai mentre scorre.

  • 11Commit di React per 3000 caratteri in streaming

    MotionStream aggiunge i caratteri direttamente e li integra in React poche volte al secondo.

01Il più semplice

Un tag e i tuoi dati

Ogni componente funziona da solo: nessun provider, componente wrapper o chiamata di configurazione. Le collezioni prendono items e renderItem, e layout, testi e stili restano tuoi.

  • Importa un componente e passagli un valore. Questa è tutta l’integrazione.
  • Liste, tab e pager leggono il tuo array; le key sono item.id di default.
  • Il testo resta testo vero: va a capo, si adatta al font e si può selezionare.
  • <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} />;

Sei componenti dal vivo, e la riga di codice dietro ciascuno.

Preparazione dell’esempio…

02Il più veloce

Lo riproduce il browser. React resta fermo.

Sul web non c’è nessuna libreria di animazione da caricare: i componenti affidano il movimento alla Web Animations API, quindi un numero che scorre o un pannello che si ridimensiona non costano JavaScript per frame né render di React mentre si muovono.

  • 0 callback di frame JS mentre 12 animazioni girano insieme.
  • Un commit di React per ogni cambio di valore, non uno per frame.
  • Testo in streaming: 11 commit di React per 3000 caratteri. L’esempio qui sotto conta i propri render.

Preparazione dell’esempio…

03Il più stabile

Interrompi qualsiasi cosa. Non salta mai.

Ogni nuovo valore parte da ciò che è sullo schermo e le molle conservano la velocità, così clic rapidi, raffiche di dati e inversioni sembrano intenzionali. Quando il movimento finisce, non resta nulla in esecuzione.

  • I numeri non si spezzano mai: le cifre rimanenti scivolano mentre scorrono.
  • 200 nuovi valori a 5 ms di distanza: 0 animazioni rimaste dopo, e il testo finale esatto.
  • Sicuro con React StrictMode. In un’app React Native in background, il movimento si porta al suo stato finale.

Preparazione dell’esempio…

16 componenti, raggruppati per il lavoro che fanno

Numeri e testo, contenuti che cambiano dimensione, selezione, liste, gesti, overlay e avanzamento. Ognuno ha un banco di prova dal vivo con le sue props a lato.

Tutti i componenti

Lo stesso import sul web e su React Native

Metro sceglie l’implementazione nativa e i bundler web quella DOM. Ogni piattaforma riproduce il movimento nel modo che le riesce meglio.

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
Transform e opacityWeb Animations API, molle campionate in modo analiticoAnimated con il driver nativo
Larghezza e altezzaWeb Animations APIAnimated con il driver JS, perché è layout
Testo in streamingCaratteri aggiunti che compaiono in dissolvenza; pochi render di React al secondoUn vero Text, rivelato senza dissolvenza
Sheet e zoomUn dialog nativo nel top layerUn Modal trasparente; il tasto Indietro lo chiude

Inizia in due minuti

Installa, importa un componente, passagli un valore.

npm install @kkwaenggwari/animated-chorus

Cerca

Scrivi per cercare nella documentazione.