React · React Native · 16 componentes
Interações difíceis, já prontas.
O Animated Chorus é um conjunto de componentes de animação para as interações que dão trabalho para acertar à mão: números que rolam, texto em streaming, trocas que redimensionam, sheets, paginadores, ações de deslizar e listas que animam só o que mudou. Uma tag e seus dados. Sem provider, sem configuração.
npm install @kkwaenggwari/animated-chorusMedido neste build
Chrome, 2026-09-28. Todas as condições e amostras estão no guia de desempenho. Como foi medido
- 28.0KBKB gzip para os 16 exports
Toda a entrada web, minificada. React é a única dependência peer.
- 0Callbacks de quadro de JS durante a animação
Um número, uma altura e um destaque mudando juntos: o navegador reproduz todas as 12 animações.
- 1Commit do React por mudança de valor
MotionNumberrenderiza quando o valor muda, nunca enquanto rola. - 11Commits do React para 3000 caracteres em streaming
MotionStreamadiciona caracteres diretamente e os incorpora ao React poucas vezes por segundo.
01O mais fácil
Uma tag e seus dados
Todo componente funciona sozinho: sem provider, componente envolvente ou chamada de configuração. Coleções recebem items e renderItem, e seu layout, texto e estilos continuam sendo seus.
- Importe um componente e passe um valor. Essa é toda a integração.
- Listas, abas e paginadores leem seu array; as keys usam
item.idpor padrão. - O texto continua sendo texto de verdade: quebra linha, acompanha o tamanho da fonte e pode ser selecionado.
<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 ao vivo e a linha de código por trás de cada um.
Preparando o exemplo…
02O mais rápido
O navegador reproduz. O React fica parado.
Na web não há biblioteca de animação para carregar: os componentes entregam o movimento à Web Animations API, então um número que rola ou um painel que muda de tamanho não custam JavaScript por quadro nem render do React enquanto se movem.
- 0 callbacks de quadro de JS enquanto 12 animações rodam juntas.
- Um commit do React por mudança de valor, não um por quadro.
- Texto em streaming: 11 commits do React para 3000 caracteres. O exemplo abaixo conta os próprios renders.
Preparando o exemplo…
03O mais estável
Interrompa o que quiser. Nada salta.
Todo valor novo começa do que está na tela e as molas mantêm a velocidade, então cliques rápidos, rajadas de dados e inversões parecem intencionais. Quando o movimento termina, nada fica rodando.
- Os números nunca se partem: as casas que ficam deslizam enquanto rolam.
- 200 valores novos com 5 ms de intervalo: depois sobram 0 animações e o texto final exato.
- Seguro no React StrictMode. Em um app React Native em segundo plano, o movimento se acomoda no estado final.
Preparando o exemplo…
16 componentes, agrupados pelo que fazem
Números e texto, conteúdo que muda de tamanho, seleção, listas, gestos, sobreposições e progresso. Cada um tem uma bancada ao vivo com as props ao lado.
Todos os componentesNúmeros e texto
Conteúdo e tamanho
Seleção e paginação
Listas
Gestos
Sobreposições
Progresso
Combinados
Telas completas que combinam vários componentes, cada uma com as configurações fora do exemplo.
Todos os exemplos- Resposta de chatSugestões que se recolhem, uma resposta que chega em ritmo constante e uma linha de status que troca.
MotionStreamMotionListMotionSwapMotionHeight - Resumo do pedidoQuantidades, subtotais e o total rolam quando o carrinho muda; o aviso do cupom entra e sai; pagar exige segurar de propósito.
MotionListMotionNumberMotionPresenceMotionHold - Caixa de entradaAbas de filtro com contagens ao vivo, linhas que você desliza para fora e uma lista que fecha o espaço.
MotionHighlightMotionListMotionSwipeMotionNumber - Feed de fotosDeslize pelas fotos, pule com as miniaturas, abra qualquer foto em tela cheia e puxe os detalhes para cima.
MotionPagerMotionHighlightMotionZoomMotionSheet
O mesmo import na web e no React Native
O Metro escolhe a implementação nativa e os bundlers web, a do DOM. Cada plataforma reproduz o movimento do jeito que faz melhor.
// 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 e opacidade | Web Animations API, molas amostradas analiticamente | Animated com o driver nativo |
| Largura e altura | Web Animations API | Animated com o driver JS, porque é layout |
| Texto em streaming | Caracteres adicionados com fade; poucos renders do React por segundo | Um Text de verdade, exibido sem fade |
| Sheets e zoom | Um dialog nativo na camada superior | Um Modal transparente; o botão voltar fecha |
Comece em dois minutos
Instale, importe um componente e passe um valor.
npm install @kkwaenggwari/animated-chorus