Guias · 02
Web e React Native
Um import para as duas plataformas. O Metro escolhe a implementação nativa e os bundlers web, a do DOM.
O mesmo import
Instale um pacote e importe da raiz dele nas duas plataformas. React é a única dependência peer obrigatória; React Native é uma dependência peer opcional para apps nativos. Nenhuma plataforma precisa de provider, wrapper ou chamada de configuração.
// 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} />
</>
);
}Como o movimento é reproduzido
Na web, os componentes rodam na Web Animations API com molas amostradas analiticamente, então não há biblioteca de animação para carregar nem render do React por quadro. No React Native, os componentes usam Animated com o driver nativo para transforms e opacidade, e o driver JS só onde o layout (largura ou altura) muda.
| Parte | Web | React Native |
|---|---|---|
| Transforms e opacidade | Web Animations API | Animated, driver nativo |
| Largura e altura | Web Animations API | Animated, driver JS |
| Texto em streaming | Caracteres com fade, poucos renders do React por segundo | Um Text de verdade, sem fade |
| Sheets e zoom | dialog nativo na camada superior | Modal transparente |
| Segundo plano | Em uma aba oculta, o texto em streaming aparece de uma vez | O movimento se acomoda no estado final |
Particularidades do React Native
A API é a mesma; estas são as diferenças que você vai notar no dispositivo.
- Números e texto em streaming continuam sendo um
Textde verdade, então seleção, quebra de linha,numberOfLinese acessibilidade funcionam como sempre. MotionSheeteMotionZoomsão renderizados em umModaltransparente, e o botão voltar os fecha.- As
ScrollViews dentro de um sheet mantêm os próprios gestos; o sheet é arrastado pela alça e pelas áreas fixas. MotionHoldconfirma direto pela ação de ativar da acessibilidade.- O
MotionSwapinline mede o conteúdo novo em uma linha; useinline=—para conteúdo que quebra linha.
import { Text, View } from 'react-native';
import { MotionNumber, MotionSheet } from '@kkwaenggwari/animated-chorus';
export function Wallet({ balance, open, setOpen }) {
return (
<View>
<MotionNumber
value={balance}
intl
locale="en-US"
format={{ style: 'currency', currency: 'USD' }}
/>
<MotionSheet open={open} onOpenChange={setOpen} detents={[0.5, 0.9]}>
<Text>Recent activity</Text>
</MotionSheet>
</View>
);
}Seu layout continua seu
Os componentes mantêm o layout próprio da plataforma: métricas do texto, quebra de linha, escala da fonte, restrições do pai e seus estilos. O movimento nunca impõe ao seu texto uma largura de caractere, uma altura fixa ou uma máscara de recorte.
O que é verificado e onde
O comportamento na web é verificado em navegadores reais. O do React Native é coberto por testes dos modelos compartilhados e por um renderizador simulado, então confira gestos e layout nos seus dispositivos-alvo antes de publicar.