Todos os componentes

MotionSwap

Conteúdo que faz crossfade enquanto o tamanho acompanha.

WebReact NativeConteúdo e tamanho

Experimente

Preparando o exemplo…

Uso mais curto

SaveButton.jsx
<button onClick={save}>
  <MotionSwap value={status} effect="up">
    {status === 'saving' ? 'Saving…' : status === 'saved' ? 'Saved' : 'Save'}
  </MotionSwap>
</button>;

O que ele resolve para você

  • O elemento muda do tamanho na tela para o tamanho natural do novo conteúdo, então os botões nunca saltam.
  • O conteúdo antigo some onde estava enquanto o novo aparece; nenhum dos dois se reorganiza durante a troca.
  • Voltar no meio de uma troca continua do que está na tela, em vez de empilhar cópias.
  • Filhos de texto simples são o próprio value; para todo o resto, passe value.

Use para

  • Salvar, depois Salvando…, depois Salvo.
  • Um skeleton que vira um card de perfil.
  • Um botão de play que vira pause.

Props

PropTipoPadrãoDescrição
valueunknownIdentidade do conteúdo; um valor novo dispara a troca. Filhos de texto simples são a própria identidade.
childrenReactNodeO conteúdo.
aselement'span'O elemento a renderizar.
inlinebooleanas === 'span'true ajusta o tamanho ao conteúdo (rótulos, ícones); false ocupa a largura do pai e anima a altura.
align'start' | 'center' | 'end''center'Onde o conteúdo fica enquanto o tamanho muda.
effect'fade' | 'up' | 'down' | 'scale''fade'Como o conteúdo entra e sai: up sobe, down desce, scale cresce.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
onMotionComplete(value) => 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

inline (padrão quando renderizado como span) anima largura e altura; inline={false} ocupa a largura do pai e anima a altura.

No React Native, trocas inline medem o conteúdo novo em uma linha; use inline={false} para conteúdo que quebra linha.

Usado nestes exemplos

Pesquisar

Digite para pesquisar na documentação.