Todos os componentes

MotionNumber · MotionText

Um número cujas casas rolam como rodas, inclusive casas que aparecem ou somem.

WebReact NativeNúmeros e texto

Experimente

Preparando o exemplo…

Uso mais curto

Total.jsx
<MotionNumber value={count} />
<MotionNumber value={total} mode="roll" intl locale="en-US"
  format={{ style: 'currency', currency: 'USD' }} />
<MotionText>{status}</MotionText>

O que ele resolve para você

  • Vai-um: 999 → 1,000 faz cada casa que muda rolar no mesmo sentido, como um odômetro.
  • Casas que aparecem ou somem entram e saem rolando na própria coluna, em vez de surgir de repente.
  • Separadores, sinais e símbolos de moeda aparecem e somem com a casa a que pertencem.
  • As casas que ficam deslizam para a nova posição enquanto rolam, então o número nunca se parte.
  • Um valor novo no meio do movimento continua exatamente do que está na tela.
  • A formatação nunca exige Intl: passe texto ou uma função format, ou ative com intl.

Use para

  • O total de um carrinho que muda conforme os itens são adicionados.
  • Um contador ou placar ao vivo.
  • Um número de painel que atualiza a cada poucos segundos.

Props

MotionNumber

PropTipoPadrãoDescrição
valuenumber | bigint | string—obrigatóriaO número, ou um texto numérico já formatado por quem chama.
mode'replace' | 'roll''replace'replace move cada casa alterada um passo; roll passa pelos dígitos intermediários.
direction'auto' | 'digit' | 'up' | 'down''auto'auto segue a mudança de grandeza, para o vai-um rolar em um sentido; digit compara cada casa por conta própria.
staggernumber45Milissegundos entre as casas alteradas, das unidades para fora. A onda inteira tem limite.
format(value) => string | Intl.NumberFormatOptionsUma função que retorna o texto a mostrar, ou opções de Intl.NumberFormat (com intl).
intlbooleanfalseUsa o Intl.NumberFormat embutido. Desligado por padrão para que nenhum ambiente precise de Intl.
localestring | string[]Locale para intl.
prefixstringTexto antes do número.
suffixstringTexto depois do número.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
onMotionComplete(value) => voidRoda com o valor quando as casas se acomodam.

MotionText

PropTipoPadrãoDescrição
childrenReactNodeO texto a mostrar.
aselement'span'O elemento a renderizar.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
onMotionComplete(text) => voidRoda quando o movimento se acomoda.

As outras props vão para o elemento renderizado, então className, style e handlers de eventos funcionam normalmente.

Web e React Native

Na web, cada casa é uma pequena pilha de glifos reproduzida pela Web Animations API, e o texto continua selecionável. MotionText anima qualquer texto: texto numérico rola por casa, os demais trocam.

No React Native, o número continua sendo um Text de verdade para layout, seleção e acessibilidade, incluindo quebra de linha e numberOfLines; os glifos se movem com o driver nativo.

Usado nestes exemplos

Pesquisar

Digite para pesquisar na documentação.