Skip to content

07. Contenido Dinámico

Markdown es un lenguaje de marcado ligero para crear contenido formateado, mientras que MDX extiende Markdown permitiendo usar componentes JSX dentro del contenido.

Propósito

  • Escribir contenido de forma simple y legible
  • Generar HTML automáticamente
  • Ideal para blogs, documentación y páginas de contenido
  • Separar contenido de presentación

Características

  • Sintaxis simple y minimalista
  • Conversión automática a HTML
  • Soporte nativo en Astro
  • Frontmatter para metadatos

Propósito

  • Combinar contenido Markdown con componentes interactivos
  • Reutilizar componentes en documentación
  • Crear contenido dinámico y rico
  • Mantener la simplicidad de Markdown con poder de React

Características

  • Importar y usar componentes React/Vue/Svelte
  • Usar JavaScript dentro del contenido
  • Mantener sintaxis Markdown
  • Validación de tipos con TypeScript
  1. Archivos .md: Markdown puro, se convierten a HTML
  2. Archivos .mdx: Markdown con componentes, se procesan con MDX
  3. Frontmatter: Metadatos en YAML al inicio del archivo
  4. Layouts: Plantillas para envolver el contenido
  5. Componentes: Se pueden importar y usar en MDX

Bloque de metadatos en formato YAML al inicio del archivo:

---
title: Mi Artículo
date: 2024-01-15
author: Juan Pérez
tags: [astro, web]
---
AspectoMarkdownMDX
Simplicidad✅ Muy simple⚠️ Requiere conocer componentes
Interactividad❌ Solo estático✅ Componentes dinámicos
Rendimiento✅ Muy rápido✅ Rápido (SSG)
Mantenibilidad✅ Fácil de editar✅ Reutilizable
Uso recomendadoContenido simpleContenido rico

7.2 Colecciones de contenido (content collections)

Section titled “7.2 Colecciones de contenido (content collections)”

Las Content Collections son una forma estructurada y con validación de tipos para gestionar contenido en Astro (blogs, documentación, productos, etc.).

  • Organizar contenido de forma estructurada
  • Validar esquemas con Zod
  • Obtener autocompletado y type-safety
  • Consultar y filtrar contenido fácilmente
  • Generar páginas dinámicas automáticamente
  1. Definición: Se crean en src/content/[colección]/
  2. Esquema: Se define en src/content/config.ts
  3. Validación: Zod valida el frontmatter
  4. Consulta: API de getCollection() y getEntry()
  5. Renderizado: Función render() para obtener HTML
src/
└── content/
├── config.ts # Definición de esquemas
├── blog/ # Colección de blog
│ ├── post-1.md
│ └── post-2.mdx
└── docs/ # Colección de docs
├── intro.md
└── guide.md

Funciones principales

  • getCollection(name): Obtiene todas las entradas de una colección
  • getEntry(collection, slug): Obtiene una entrada específica
  • entry.render(): Renderiza el contenido a HTML

Zod es una librería de validación de esquemas TypeScript:

  • Define tipos de datos esperados
  • Valida frontmatter automáticamente
  • Proporciona errores claros
  • Genera tipos TypeScript automáticamente
  • Type Safety: Errores en tiempo de desarrollo
  • Autocompletado: IntelliSense en el editor
  • Validación: Frontmatter correcto garantizado
  • Organización: Estructura clara del contenido
  • Rendimiento: Optimización automática
  • Consultas: API simple y poderosa
TipoDescripciónUso
contentArchivos Markdown/MDXBlogs, docs
dataArchivos JSON/YAMLConfiguración, datos

Astro permite consumir datos de APIs REST, archivos JSON locales y otras fuentes de datos durante el proceso de build para generar páginas estáticas.

  • Obtener datos de APIs externas (REST, GraphQL)
  • Cargar datos desde archivos JSON/YAML locales
  • Generar páginas dinámicas con datos externos
  • Mantener contenido actualizado desde fuentes externas
  • Crear sitios estáticos con datos dinámicos

En Build Time (SSG)

  1. Astro ejecuta código durante el build
  2. Hace peticiones a APIs o lee archivos
  3. Procesa y transforma los datos
  4. Genera HTML estático con los datos
  5. El resultado es un sitio completamente estático

En Runtime (SSR)

  1. Las peticiones se hacen cuando el usuario visita la página
  2. Los datos se obtienen en tiempo real
  3. Se genera HTML dinámicamente
  4. Requiere un servidor Node.js

1. Fetch API

  • API nativa de JavaScript
  • Disponible en el frontmatter de Astro
  • Ideal para APIs REST
  • Soporte para async/await

2. Archivos JSON Locales

  • Importación directa con import
  • Datos estáticos en el proyecto
  • Sin necesidad de red
  • Ideal para configuración y datos fijos

3. Librerías HTTP

  • Axios, node-fetch, etc.
  • Más funcionalidades que fetch
  • Interceptores, transformaciones
  • Manejo avanzado de errores
MétodoCuándo UsarVentajas
Fetch en BuildDatos que cambian pocoSitio estático rápido
JSON LocalDatos fijos del proyectoSin dependencias externas
SSRDatos en tiempo realSiempre actualizado
ISRBalance actualización/rendimientoLo mejor de ambos
  1. Caché: Guarda respuestas para evitar peticiones repetidas
  2. Manejo de Errores: Siempre valida respuestas de APIs
  3. Tipos: Usa TypeScript para validar datos
  4. Paginación: Maneja grandes conjuntos de datos
  5. Rate Limiting: Respeta límites de APIs
  6. Variables de Entorno: Usa .env para API keys
  • API Keys: Nunca expongas en el cliente
  • Variables de Entorno: Usa import.meta.env
  • Validación: Valida datos de APIs externas
  • CORS: Considera restricciones de origen cruzado
🐝