Para instalar automáticamente React en Astro:
npx astro add react
Astro instalará y configurará automáticamente React y todas sus dependencias, también se encargará de modificar los archivos de configuración automáticamente.
Integrar React en Astro te permite combinar la velocidad de Astro con la flexibilidad de la librería más usada para construir interfaces web. Aprenderás a instalar dependencias, configurar el soporte y crear tu primer componente .tsx dentro de un proyecto Astro con TypeScript y Tailwind.
¿Qué dependencias necesito para usar React en Astro?
Antes de escribir cualquier componente, debes instalar el adaptador oficial y la librería en sí. Detén el servidor de desarrollo en la terminal y ejecuta los siguientes comandos.
npm install @astrojs/react@2.0.2 para añadir el soporte de Astro con React.npm install react@18.2.0 react-dom@18.2.0 para sumar la librería y su renderizador en el DOM.Con estas tres piezas listas, tu proyecto ya tiene todo lo necesario para reconocer archivos .tsx [01:00].
¿Por qué necesito @astrojs/react además de react? Porque
@astrojs/reactes el adaptador que conecta la librería con el motor de Astro. Sin él, Astro no sabría cómo renderizar componentes de React.
¿Cómo configuro el soporte de React en astro.config?
El siguiente paso ocurre en el archivo de configuración de Astro. Ahí registras la integración para que el framework procese los componentes que vas a crear.
Dentro de astro.config haces import React from "@astrojs/react" y lo agregas al arreglo de integrations, junto a otras integraciones que ya tengas como Tailwind o MDX [01:40]. Guardas el archivo y el soporte queda activo.
¿Por qué uso la extensión .tsx en lugar de .astro?
La extensión .tsx indica que el archivo combina React con TypeScript. Como el proyecto ya usa TypeScript, esta es la opción natural para tipar props y aprovechar el autocompletado del editor.
Un archivo .astro divide JavaScript y plantilla con tres guiones, mientras que un archivo .tsx es JavaScript de principio a fin. Toda la lógica y la estructura conviven en el mismo bloque.
¿Cómo creo mi primer componente Header en React?
Dentro de la carpeta de componentes creas header.tsx. La estructura sigue el patrón clásico de React: una interfaz para los props, una arrow function y un return con el JSX.
tsx import React from "react"
interface Props { title: string }
const Header = ({ title }: Props) => { return ( <div className="mx-auto max-w-screen-xl px-4 py-6"> <h1 className="mb-4"> <span className="font-extrabold text-transparent text-4xl bg-clip-text bg-gradient-to-r from-purple-400 to-pink-600"> {title} </span> </h1> </div> ) }
export default Header
Fíjate en un detalle clave: en React no usas class, usas className. La palabra class está reservada en JavaScript, así que React la reemplaza para evitar conflictos y warnings en el navegador [04:30].
¿Qué es className en React? Es el atributo equivalente a
classde HTML. Lo necesitas para aplicar estilos de Tailwind o cualquier hoja de estilos cuando trabajas con JSX.
¿Cómo aplico un degradado con Tailwind dentro del componente?
El truco para lograr un título con degradado combina varias utilidades de Tailwind:
text-transparent para que el color del texto no tape el fondo.bg-clip-text para recortar el fondo siguiendo la forma de las letras.bg-gradient-to-r from-purple-400 to-pink-600 para definir la dirección y los colores del degradado.Esa combinación produce un texto con apariencia de gradiente, una técnica muy usada en headers modernos.
¿Cómo uso el componente React dentro de una página Astro?
Vas a la ruta dinámica de tus posts y, dentro del layout base, importas el Header desde la carpeta de componentes. Le pasas el prop title con el valor que corresponda, por ejemplo astroBill.tips.
Una observación útil: en JavaScript las extensiones suelen omitirse al importar, así que verás el import sin .tsx. Si en cambio importaras el componente antiguo, tendrías que escribir .astro de forma explícita [06:50].
¿Por qué Tailwind no aplica estilos a mi archivo .tsx?
Si al renderizar la página el degradado no aparece, el problema casi siempre está en tailwind.config. Tailwind solo analiza las extensiones declaradas en la propiedad content.
Por defecto encuentras soporte para .astro, .html, .js y .jsx, pero falta .tsx. Agrega esa extensión al arreglo, guarda el archivo y el proyecto se reconstruye automáticamente con los estilos aplicados [08:00].
¿Cómo activo Tailwind en archivos .tsx? Abre
tailwind.config, localiza la propiedadcontenty añade el patrón que incluyatsx. Sin ese ajuste, las clases de Tailwind se ignoran en componentes React.
Con todo conectado, ya tienes un componente React funcional dentro de un proyecto Astro, con estilos de Tailwind y props tipados con TypeScript. ¿Te animas a replicar el ejercicio creando un footer en Vue para seguir explorando integraciones?
Integrar React en Astro te permite combinar la velocidad de Astro con la flexibilidad de la librería más usada para construir interfaces web. Aprenderás a instalar dependencias, configurar el soporte y crear tu primer componente .tsx dentro de un proyecto Astro con TypeScript y Tailwind.
Antes de escribir cualquier componente, debes instalar el adaptador oficial y la librería en sí. Detén el servidor de desarrollo en la terminal y ejecuta los siguientes comandos.
npm install @astrojs/react@2.0.2 para añadir el soporte de Astro con React.npm install react@18.2.0 react-dom@18.2.0 para sumar la librería y su renderizador en el DOM.Con estas tres piezas listas, tu proyecto ya tiene todo lo necesario para reconocer archivos .tsx [01:00].
¿Por qué necesito @astrojs/react además de react? Porque
@astrojs/reactes el adaptador que conecta la librería con el motor de Astro. Sin él, Astro no sabría cómo renderizar componentes de React.
El siguiente paso ocurre en el archivo de configuración de Astro. Ahí registras la integración para que el framework procese los componentes que vas a crear.
Dentro de astro.config haces import React from "@astrojs/react" y lo agregas al arreglo de integrations, junto a otras integraciones que ya tengas como Tailwind o MDX [01:40]. Guardas el archivo y el soporte queda activo.
La extensión .tsx indica que el archivo combina React con TypeScript. Como el proyecto ya usa TypeScript, esta es la opción natural para tipar props y aprovechar el autocompletado del editor.
Un archivo .astro divide JavaScript y plantilla con tres guiones, mientras que un archivo .tsx es JavaScript de principio a fin. Toda la lógica y la estructura conviven en el mismo bloque.
Dentro de la carpeta de componentes creas header.tsx. La estructura sigue el patrón clásico de React: una interfaz para los props, una arrow function y un return con el JSX.
tsx import React from "react"
interface Props { title: string }
const Header = ({ title }: Props) => { return ( <div className="mx-auto max-w-screen-xl px-4 py-6"> <h1 className="mb-4"> <span className="font-extrabold text-transparent text-4xl bg-clip-text bg-gradient-to-r from-purple-400 to-pink-600"> {title} </span> </h1> </div> ) }
export default Header
Fíjate en un detalle clave: en React no usas class, usas className. La palabra class está reservada en JavaScript, así que React la reemplaza para evitar conflictos y warnings en el navegador [04:30].
¿Qué es className en React? Es el atributo equivalente a
classde HTML. Lo necesitas para aplicar estilos de Tailwind o cualquier hoja de estilos cuando trabajas con JSX.
El truco para lograr un título con degradado combina varias utilidades de Tailwind:
text-transparent para que el color del texto no tape el fondo.bg-clip-text para recortar el fondo siguiendo la forma de las letras.bg-gradient-to-r from-purple-400 to-pink-600 para definir la dirección y los colores del degradado.Esa combinación produce un texto con apariencia de gradiente, una técnica muy usada en headers modernos.
Vas a la ruta dinámica de tus posts y, dentro del layout base, importas el Header desde la carpeta de componentes. Le pasas el prop title con el valor que corresponda, por ejemplo astroBill.tips.
Una observación útil: en JavaScript las extensiones suelen omitirse al importar, así que verás el import sin .tsx. Si en cambio importaras el componente antiguo, tendrías que escribir .astro de forma explícita [06:50].
Si al renderizar la página el degradado no aparece, el problema casi siempre está en tailwind.config. Tailwind solo analiza las extensiones declaradas en la propiedad content.
Por defecto encuentras soporte para .astro, .html, .js y .jsx, pero falta .tsx. Agrega esa extensión al arreglo, guarda el archivo y el proyecto se reconstruye automáticamente con los estilos aplicados [08:00].
¿Cómo activo Tailwind en archivos .tsx? Abre
tailwind.config, localiza la propiedadcontenty añade el patrón que incluyatsx. Sin ese ajuste, las clases de Tailwind se ignoran en componentes React.
Con todo conectado, ya tienes un componente React funcional dentro de un proyecto Astro, con estilos de Tailwind y props tipados con TypeScript. ¿Te animas a replicar el ejercicio creando un footer en Vue para seguir explorando integraciones?
Para instalar automáticamente React en Astro:
npx astro add react
Astro instalará y configurará automáticamente React y todas sus dependencias, también se encargará de modificar los archivos de configuración automáticamente.
El término Island se refiere a un componente de interfaz de usuario interactivo en una página estática. En la cual, pueden existir varias islas que puede ser desarrollada en diferentes Frameworks o librerías populares de JavaScript (React, Svelte, Vue, etc.), mezcladas en la misma página. .
✨Concepto clave El patrón de arquitectura de la se construyen las Islands se conoce como hidratación parcial o selectiva.
.
Si bien, Astro compila código para generar las páginas de nuestro sitio web, Astro no dispone de dicho código del lado del cliente, delegando dicha responsabilidad a un módulo de servidor para renderizar el contenido automáticamente, anticipando y eliminando JavaScript del build final. .
✨Concepto clave Con este mecanismo, Astro mantiene todos los sitios web rápidos de forma predeterminada para mejorar el rendimiento y SEO.
.
Sin embargo, Astro entiende que algunas veces, por interacción y anatomía de la Isla que renderiza, es necesario emplear y dejar un mínimo de JavaScript para convertir la página en un SPA o Single-Page-Application. De ello, Astro nos delega la elección mediante su declaración client .
.
El beneficio principal de construir Astro con Islas es el rendimiento, minimizando el producto final para que sea rápido en la carga sin JavaScript que lo sature. . Por su parte, las Islas nos permiten desarrollar Frameworks o librerías populares que nos permitan heredar o integrar para no recrear la rueda un Sistema de Diseño. . Por último, con la directiva , le indicamos a Astro exactamente cómo y cuándo renderizar cada componente.
clientEs importante tener todas las extensiones sin espacios:
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}']
cuando lo estaba usando con espacios solo me estaba tomando la primera extension (astro):
content: ['./src/**/*.{astro, html, js, jsx, md, mdx, svelte, ts, tsx, vue}']
¿Cuál sería la utilidad o ventaja de usar un componente de React en lugar de un componente de Astro común y corriente?
A mi me pone error en las etiquetas de apertura, en el error me dice que cambie la extensión del archivo a .jsx, pero si lo cambio me dice que la linea de interface solo es compatible con la extensión .tsx, a alguien mas le ha pasado?

Una pregunta Por alguna razón no me reconoce vsc las etiquetas como <Header /> <Base /> inclusive en index.astro no me reconoce la etiqueta <Card /> Por lo que no se me importa el principio de [...slug].astro el Header y la Base
Alguien sabrá cuál puede ser el problema? Me falta algún pluggin o componente ?

📌 Enlaces importante @astrojs/react
Que tal buena día, me preguntaba si alguien sabe como darle estilos al formato markdown por que cuando lo renderiso lo manda todo plano y no toma nada de estilo?
Una consulta como puedo utilizar useNavigate de react-router-dom en un componente. Me sale un error de que solo puedo ponerlo en elementos de Router.
si bien lo que hace Oscar esta muy bueno, yo recomiendo siempre que se pueda usar la exportación en la misma función:
export const Header = ({ ``title`` }: Props) => {
No hacer una exportación default:
export default Header;
a la hora de importarlo le puedes agregar cualquier nombre y en trabajos con otros equipos si se le coloca el nombre diferente puede ocasionar confusiones, hacerlo sin default obliga a usar el nombre "real"
import { Header } from "../../components/Header";