Introducción

Astro Base Framework Moderno

Astro es el framework web que combina lo mejor del contenido estático con componentes interactivos, ofreciendo:

  • Rendimiento máximo con cero JS por defecto
  • Arquitectura de islas para hidratación selectiva
  • Multi-framework (React, Svelte, Vue y más)
  • Contenido organizado con colecciones tipadas

Arquitectura de Islas

Cada isla es un componente interactivo que se hidrata independientemente en páginas estáticas, optimizando rendimiento y SEO.

HTML Estático
Isla React
Isla Vue
Isla Svelte
Logo

Bienvenido a nuestra tienda

Contenido estático de alto rendimiento

Categorías

  • Electrónica
  • Hogar
  • Deportes

Listado de productos

Producto 1
Producto 2
Producto 3
Producto 4

🏝️ Carrito de compras (React)

3 items | Total: $299

🏝️ Buscador (Vue)

🔍 Buscar productos...

🏝️ Recomendaciones (Svelte)

Productos sugeridos
© 2023 Mi Tienda Astro - Todos los derechos reservados

Comunicación entre Islas en Astro

Las islas en Astro son componentes interactivos que se hidratan de forma independiente. Para compartir estado entre ellas, debes usar estos patrones específicos:

Event Bus

Comunicación mediante eventos personalizados del navegador, ideales para interacciones simples entre componentes.

ejemplo-event-bus.astro
1
// Emisor (Vue)
2
const emitEvent = () => {
3
  window.dispatchEvent(new CustomEvent('cart-updated', {
4
    detail: { items: cartItems }
5
  }));
6
}
7
8
// Receptor (React)
9
useEffect(() => {
10
  const handler = (e) => setItems(e.detail.items);
11
  window.addEventListener('cart-updated', handler);
12
  return () => window.removeEventListener('cart-updated', handler);
13
}, []);
Cuándo usar: Actualizaciones de carrito, notificaciones entre componentes

Global State

Stores agnósticas que funcionan en cualquier framework (Nanostores, Zustand).

ejemplo-global-state.astro
1
// store.js
2
import { atom } from 'nanostores';
3
export const $cart = atom([]);
4
5
// Isla React
6
import { $cart } from './store';
7
useEffect(() => $cart.subscribe(setItems), []);
8
9
// Isla Svelte
10
import { $cart } from './store';
11
$: items = $cart.get();
Cuándo usar: Estado compartido como carrito, autenticación, temas

URL State

Estado persistente en la URL que todas las islas pueden leer.

ejemplo-url-state.astro
1
// Lectura
2
const params = new URLSearchParams(location.search);
3
const category = params.get('category');
4
5
// Escritura
6
const updateFilters = (newFilters) => {
7
  const params = new URLSearchParams(newFilters);
8
  history.pushState({}, '', `?${params.toString()}`);
9
}
Cuándo usar: Filtros, paginación, parámetros compartibles

Patrones que NO funcionan

  • ref.current entre componentes de diferentes islas
  • Context API de React entre frameworks distintos
  • Stores específicas (Vuex, Svelte stores) entre islas
  • Comunicación directa entre componentes de diferentes frameworks

¿Qué son las Directivas?

Las directivas son atributos especiales de HTML disponibles dentro del maquetado de los componentes de Astro (archivos .astro). Controlan el comportamiento de elementos y componentes de manera específica.

Reglas para Directivas

  • Deben incluir dos puntos : en su nombre (formato X:Y)
  • Deben ser visibles para el compilador
  • Ejemplo: client:load, class:list

Directivas de Astro

Directivas Comunes

Directiva Propósito Detalles
class:list Convierte un array de clases en un string de clases CSS
  • string: Se agrega al elemento
  • Object: Keys verdaderas se agregan
  • Array: Se aplana
  • Valores falsy se omiten
set:html Inyecta un string de HTML ⚠️ Advertencia: Astro no verifica el valor (riesgo XSS)
set:text Inyecta texto de forma segura Equivalente a innerText

Directivas del Cliente

Directiva Propósito Prioridad Uso típico
client:load Hidrata inmediatamente al cargar Alta UI visible e interactiva desde el inicio
client:idle Hidrata cuando el navegador está inactivo Media UI de menor prioridad
client:visible Hidrata al entrar en el viewport Baja Elementos fuera del viewport inicial
client:media Hidrata si se cumple media query Baja Elementos dependientes del tamaño de pantalla
client:only Renderiza solo en el cliente - Para frameworks específicos (React, Vue, etc.)

Otras Directivas

Directiva Propósito Detalles
server:defer Convierte en isla de servidor Renderizado bajo demanda
is:global Aplica estilos CSS globalmente No solo al componente
is:inline Evita procesamiento de Astro No se empaquetan, no se deduplican
define:vars Pasa variables del servidor Solo JSON-serializables, implica is:inline
is:raw Trata hijos como texto plano Ignora sintaxis de Astro

Ejemplo de Directiva class:list

Ejemplo Interactivo de class:list

Cambia los controles para ver cómo class:list genera las clases CSS dinámicamente

Controles Interactivos

Vista Previa:

Código Oculto

Haz clic en "Ver código generado" para mostrar cómo class:list construye las clases CSS dinámicamente

Content Collections Tu Base de Datos de Contenido

Gestiona tu Contenido como un Pro

las Content Collections son la forma más poderosa de organizar y validar contenido en Astro. Con TypeScript automático y validación de esquemas, transforman tu contenido en una base de datos tipada.

¿Qué son las Content Collections?

Content collections son la mejor forma de gestionar conjuntos de contenido en cualquier proyecto Astro. Las Collections ayudan a organizar y consultar tus documentos, habilitan Intellisense y la comprobación de tipos en tu editor, y proporcionan seguridad de tipos TypeScript automática para todo tu contenido.

Piensa en ellas como tu base de datos de archivos con superpoderes: validación automática, tipos de TypeScript y consultas optimizadas.

Estructura típica:

estructura-proyecto
src/
└──content/
├──blog/ ← Colección "blog"
│ ├──post-1.md
│ └──post-2.md
├──projects/ ← Colección "projects"
│ ├──project-a.md
│ └──project-b.md
└──config.ts ← Configuración y schemas

Validación Automática

Zod valida tus frontmatter automáticamente

TypeScript

Tipos automáticos sin configuración extra

Rendimiento SSG

Todo se procesa en build time