Contenido del curso
Primeros Pasos
Proyecto
Astro API
- 10

Cómo crear componentes reutilizables en Astro
Viendo ahora - 11

Páginas y rutas con archivos en Astro
06:04 min - 12

Creación de Plantillas en Astro para Páginas Markdown
08:49 min - 13

Iteración de Archivos Markdown en Proyecto Astro con JavaScript
12:15 min - 14

variables JSX en archivos MDX de Astro
06:51 min - 15

Rutas estáticas y dinámicas en Astro
15:12 min - 16

Rutas dinámicas con getStaticPaths en Astro
07:30 min - 17

Crea un layout de posts en Astro con Tailwind
11:23 min
Astro Islands
Deploy
Bonus
Cierre
Cómo crear componentes reutilizables en Astro
Resumen
Separar tu interfaz en componentes reutilizables es uno de los pasos más importantes cuando trabajas con Astro. Aprenderás a crear componentes en Astro partiendo del archivo index.astro, identificando qué fragmentos pueden vivir por separado y cómo pasar datos entre ellos con TypeScript.
¿Qué partes del proyecto se pueden convertir en componentes?
Antes de escribir código nuevo conviene mirar lo que ya tienes. Dentro de pages/index.astro encuentras varios bloques que cumplen funciones distintas: el H1 superior, el mensaje con instrucciones y la tarjeta inferior. Cada uno puede vivir como un componente independiente.
En Astro, casi cualquier elemento que construyas puede tratarse como componente, incluido el propio layout, que funciona como plantilla y que más adelante revelará su verdadera ventaja. Por ahora, identifica dos candidatos claros: un header con el título y un hero con el texto de instrucciones.
¿Qué es un componente en Astro? Es un archivo
.astrocon tres zonas: lógica en JavaScript o TypeScript arriba, marcado HTML en el medio y estilos encapsulados con la etiqueta<style>. Esos estilos solo afectan al componente.
¿Cómo construir el componente header con props tipadas?
Crea un nuevo archivo llamado header.astro. La estructura empieza con tres guiones (---) que abren el bloque de lógica donde puedes declarar tipos, importar utilidades o leer las props que llegan desde fuera [00:54].
Dentro de ese bloque defines una interfaz con TypeScript para tipar las props. Así sabes exactamente qué espera recibir tu componente:
astro
export interface Props { title: string; }
const { title } = Astro.props;
<h1>{title}</h1> <style> /* gradiente y estilos del h1 movidos desde index.astro */ </style>El flujo es claro:
- Declaras la interfaz
Propscontitlede tipostring. - Extraes el valor con
const { title } = Astro.props. - Mueves el
H1original y sus estilos (gradiente incluido) desdeindex.astroal nuevo archivo. - Reemplazas el texto fijo por la variable
{title}para que sea dinámico.
Con Prettier puedes ordenar la indentación al guardar, lo que mantiene legible la separación entre lógica, marcado y estilos.
¿Cuándo conviene un componente sin lógica como hero?
No todos los componentes necesitan TypeScript ni props. El segundo bloque del proyecto, el párrafo con instrucciones, es puramente presentacional. Ahí creas hero.astro y omites el bloque de lógica.
¿Qué es un componente presentacional? Es un componente que solo contiene HTML y estilos, sin JavaScript ni props. Se usa para fragmentos visuales fijos que no cambian según datos externos.
El proceso es directo:
- Copias la etiqueta
<p>con el contenido del hero desdeindex.astro. - Cortas la clase de estilos asociada y la pegas dentro de
<style>en el nuevo archivo. - Importas el componente en
index.astroy lo usas como<Hero />, sin pasar props.
Al encapsular los estilos dentro del propio componente, evitas que se filtren al resto del proyecto. Esa es una de las razones por las que Astro resulta cómodo para mantener proyectos grandes: cada componente carga lo suyo.
¿Cómo queda el index.astro después de la separación?
Después de extraer el header y el hero, tu index.astro queda mucho más limpio. Solo importa los componentes y los compone dentro del layout, pasando el title cuando sea necesario:
astro
import Header from '../components/header.astro'; import Hero from '../components/hero.astro'; import Card from '../components/card.astro';
<Header title="Tu título aquí" /> <Hero /> <Card />Al revisar el navegador comprobarás que el header, el hero y la card que ya venías trabajando funcionan igual que antes, pero ahora cada uno vive en su propio archivo y puede reutilizarse en otras páginas.
Esta lógica de partir interfaces en piezas pequeñas es la base de cualquier proyecto escalable en Astro. ¿Qué otro bloque de tu index.astro convertirías en componente y por qué? Cuéntalo en los comentarios.