Guías · 02
Web y React Native
Un import para las dos plataformas. Metro elige la implementación nativa y los bundlers web, la del DOM.
El mismo import
Instala un paquete e importa desde su raíz en ambas plataformas. React es la única dependencia peer obligatoria; React Native es una dependencia peer opcional para apps nativas. Ninguna plataforma necesita provider, envoltorio ni llamada de configuración.
// 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} />
</>
);
}Cómo se reproduce el movimiento
En la web, los componentes se reproducen con la Web Animations API y resortes muestreados analíticamente, así que no hay librería de animación que cargar ni renders de React por fotograma. En React Native, los componentes usan Animated con el driver nativo para transforms y opacidad, y el driver de JS solo donde cambia el layout (ancho o alto).
| Parte | Web | React Native |
|---|---|---|
| Transforms y opacidad | Web Animations API | Animated, driver nativo |
| Ancho y alto | Web Animations API | Animated, driver de JS |
| Texto en streaming | Caracteres con fundido, unos pocos renders de React por segundo | Un Text real, sin fundido |
| Hojas y zoom | dialog nativo en la capa superior | Modal transparente |
| Segundo plano | En una pestaña oculta, el texto en streaming se muestra de golpe | El movimiento se asienta en su estado final |
Particularidades de React Native
La API es la misma; estas son las diferencias que notarás en un dispositivo.
- Los números y el texto en streaming siguen siendo un
Textreal, así que la selección, el ajuste de línea,numberOfLinesy la accesibilidad se comportan como siempre. MotionSheetyMotionZoomse renderizan en unModaltransparente, y el botón de retroceso los cierra.- Los
ScrollViewdentro de una hoja conservan sus propios gestos; la hoja se arrastra por su asa y sus zonas fijas. MotionHoldconfirma directamente desde la acción de activar de accesibilidad.MotionSwapinline mide el contenido nuevo en una línea; usainline=—para contenido que se ajusta en varias.
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>
);
}Tu layout sigue siendo tuyo
Los componentes respetan el layout propio de la plataforma: métricas del texto, ajuste de línea, escalado de la fuente, restricciones del padre y tus estilos. La animación nunca impone a tu texto un ancho de carácter, una altura fija ni una máscara de recorte.
Qué se verifica y dónde
El comportamiento web se verifica en navegadores reales. El de React Native está cubierto por pruebas de los modelos compartidos y un renderizador simulado, así que revisa los gestos y el layout en tus dispositivos de destino antes de publicar.