Codemaster
Tutoriales

Utilizar componentes React en Astro

Jesús Quintana
#Tutoriales#React#Astro

Introducción

React

Astro es un framenwork en principio diseñado para crear sitios web estáticos que se centra en la velocidad y el rendimiento. En segundo lugar, Astro es un lenguaje de programación específico del dominio (DSL) utilizado en el desarrollo de sistemas embebidos en tiempo real.

Si te refieres a Astro como el generador de sitios web estáticos, su enfoque principal es la construcción de sitios web de alto rendimiento. Se integra fácilmente con otros componentes de diferentes frameworks y tecnologías web para crear aplicaciones web más ricas y dinámicas. A continuación, te proporciono información sobre cómo puedes integrar Astro con componentes de otros frameworks web:

  1. React y Svelte: Astro permite la incorporación de componentes de React y Svelte en su proyecto. Esto se hace mediante el uso de los adaptadores adecuados, como @astro/typescript o @astro/typescript-react. Esto significa que puedes mezclar y combinar componentes de React o Svelte con componentes de Astro en un mismo proyecto.

  2. Vue.js: Aunque Astro no es específicamente compatible con Vue.js, puedes integrar Vue.js en un proyecto Astro utilizando los adaptadores apropiados. Esto te permite utilizar componentes de Vue.js en tu sitio web Astro y obtener ventajas de rendimiento.

  3. Gestión de rutas con React Router o Vue Router: Puedes usar React Router o Vue Router para gestionar las rutas en tu aplicación web Astro. Esto te permite crear una aplicación de una sola página (SPA) o una aplicación de múltiples páginas según tus necesidades.

  4. Estado global con Redux o Vuex: Si deseas administrar el estado global en tu aplicación Astro, puedes integrar bibliotecas como Redux (para React) o Vuex (para Vue) para administrar el estado de manera eficiente.

  5. Bundling con Webpack o Rollup: Para el empaquetado y la optimización de tus recursos, puedes integrar Webpack o Rollup en tu flujo de trabajo de desarrollo junto con Astro. Esto te permite gestionar la generación de bundles y la optimización de recursos como JavaScript, CSS y assets.

  6. API y servicios externos: Astro es compatible con la comunicación con API y servicios externos. Puedes utilizar bibliotecas como Axios o Fetch para hacer solicitudes HTTP a API externas y mostrar datos dinámicos en tu sitio web Astro.

La forma exacta de integrar componentes de otros frameworks dependerá de tu proyecto específico y de las tecnologías que estés utilizando. Astro está diseñado para ser flexible y compatible con muchas tecnologías web comunes, lo que te permite crear aplicaciones web eficientes y rápidas sin estar limitado a una única tecnología.

Integración de React con Astro

En este tutorial, veremos cómo integrar componentes de React en Astro. Para agregar componentes de React a Astro, primero debemos instalar React en nuestro proyecto Astro.

Instalación

Puedes instalar React en tu proyecto Astro utilizando uno de los siguientes comandos, dependiendo del gestor de paquetes que estés utilizando en tu proyecto:

npx astro add react
yarn astro add react
pnpm astro add react

A continuación, crearemos un componente que permita crear animaciones similares a las que se encuentran en este sitio web. Para lograrlo, necesitaremos instalar “framer-motion”, una biblioteca especializada en la creación de animaciones. Desde tu terminal, ejecuta el siguiente comando:

npm install framer-motion

¿Qué es framer-motion?

Framer Motion es una biblioteca de animación de alto rendimiento para React. Permite crear animaciones suaves y fluidas en aplicaciones web y móviles, y es ampliamente utilizado en el desarrollo front-end para mejorar la experiencia del usuario. Aquí tienes una explicación más detallada de lo que Framer Motion ofrece:

  1. Animaciones Declarativas: Framer Motion se destaca por su enfoque en animaciones declarativas. Puedes describir tus animaciones mediante componentes React y propiedades, lo que hace que sea más fácil entender y mantener el código de animación.

  2. Facilidad de Uso: Framer Motion proporciona una API sencilla y fácil de usar. Puedes animar elementos HTML, componentes React y mucho más con solo unas pocas líneas de código.

  3. Suavidad y Rendimiento: Framer Motion está diseñado para ofrecer animaciones suaves y de alto rendimiento. Utiliza tecnologías modernas como CSS variables y transformaciones para lograr resultados visuales impresionantes sin cargar excesivamente la CPU o el GPU.

  4. Soporte para Diversos Tipos de Animaciones: Puedes crear animaciones de movimiento, rotación, escala, opacidad y muchas otras. También es posible crear animaciones de transición entre rutas en aplicaciones de una sola página (SPA).

  5. Control de Interrupciones y Variaciones: Framer Motion permite controlar las interrupciones en las animaciones, lo que significa que puedes pausar, detener o revertir una animación en cualquier momento. También es posible controlar las variaciones de animación según eventos específicos.

  6. Gestión de Estado de Componente: Framer Motion es compatible con la gestión de estado de componentes React, lo que te permite vincular animaciones a cambios de estado en tu aplicación.

  7. Fácil Integración con React: Dado que Framer Motion es una biblioteca de React, se integra de manera natural con proyectos React. Puedes usarla junto con otros componentes React y bibliotecas sin problemas.

  8. Personalización: Ofrece una amplia gama de opciones de personalización, como la duración de la animación, la dirección, la aceleración, la desaceleración y más. Esto te permite crear animaciones que se ajusten a tus necesidades específicas.

Framer Motion es una poderosa herramienta para agregar efectos visuales y dinámicos a tus aplicaciones web y móviles basadas en React. Su enfoque declarativo, facilidad de uso y rendimiento hacen que sea una elección popular para desarrolladores que desean crear experiencias de usuario atractivas y agradables.

Para saber más consulte su página oficial: https://www.framer.com/motion/

Desarrollo del componente

Para implementer un componente React proceda de la misma manera que haría con cualquier componente React. Cree un directorio components y cree un fichero jsx con el siguiente código:

import React from 'react'
import { motion } from 'framer-motion';

const Animacion = ({children}) => {
  return (
    <motion.div
    className="items-center"
    initial={{ opacity: 0.2, scale: 0.5}}
    animate={{ opacity: 1, scale: 1 }}
    transition={{ duration: 0.5 }}
  >
      {children}
    </motion.div>
  )
}

export default Animacion;

Puedes usar este componente “Animacion” alrededor de ese botón o mensaje, y automáticamente aplicará una animación para que aparezca con un efecto agradable, como una transición suave de opacidad y tamaño.

Como utilizarlo en nuestras páginas Astro

Utilizarlo en cualquier página web es tan simple como importarlo y empezar ha utilizarlo como cualquier componentet:

---
import Container from "@components/container.astro";
import Features from "@components/features.astro";
import Logos from "@components/logos.astro";
import Layout from "@layouts/Layout.astro";
import Animacion from "@components/react/animacion"
import Hero from "@components/hero.astro";
---

<Layout title="" >
  <Container>
    <Animacion client:visible>
        <Hero />
    </Animacion>
  
    <Animacion client:visible>
        <Features />
    </Animacion>
  
    <Animacion client:visible>
        <Logos />
    </Animacion>
  </Container>
</Layout>

La Prop client:visible le indica a Astro que ejecute el componente solo cuando este sea visible, si lo cambiáramos por client:load este se ejecutaría nada más cargar la página.

← Volver al Blog