Introducción
Next.js es un framework de React que permite la creación de aplicaciones web con renderizado del lado del servidor (SSR) y generación de sitios estáticos (SSG). En esta sección, nos enfocaremos en la generación de sitios estáticos, una técnica que permite pre-renderizar páginas en el momento de la construcción, mejorando el rendimiento y la optimización para motores de búsqueda (SEO).
¿Qué es la Generación de Sitios Estáticos (SSG)?
La Generación de Sitios Estáticos (SSG) es un proceso en el que las páginas de una aplicación se pre-renderizan en el momento de la construcción. Esto significa que el HTML de cada página se genera una vez y se reutiliza para cada solicitud, en lugar de generarse dinámicamente en cada solicitud.
Ventajas de SSG
- Rendimiento Mejorado: Las páginas pre-renderizadas se sirven rápidamente desde un CDN.
- SEO Optimizado: El contenido estático es fácilmente indexable por los motores de búsqueda.
- Seguridad: Menos dependencias en servidores y bases de datos dinámicas reducen la superficie de ataque.
Configuración Inicial
Antes de comenzar, asegúrate de tener Node.js y npm instalados en tu sistema. Luego, crea un nuevo proyecto de Next.js:
Creación de Páginas Estáticas
En Next.js, las páginas se crean dentro del directorio pages
. Para generar una página estática, simplemente crea un archivo JavaScript dentro de este directorio.
Ejemplo: Página Estática Básica
Crea un archivo about.js
en el directorio pages
:
// pages/about.js import React from 'react'; const About = () => { return ( <div> <h1>About Us</h1> <p>This is a static page generated at build time.</p> </div> ); }; export default About;
Generación de Páginas Dinámicas
Para generar páginas dinámicas basadas en datos, Next.js proporciona la función getStaticProps
. Esta función se ejecuta en el momento de la construcción y permite obtener datos que se pasarán a la página como props.
Ejemplo: Página Dinámica con Datos
Supongamos que tenemos una lista de artículos que queremos mostrar en una página estática. Primero, creamos un archivo articles.js
en el directorio pages
:
// pages/articles.js import React from 'react'; const Articles = ({ articles }) => { return ( <div> <h1>Articles</h1> <ul> {articles.map((article) => ( <li key={article.id}>{article.title}</li> ))} </ul> </div> ); }; export async function getStaticProps() { // Simulamos una llamada a una API para obtener los datos const articles = [ { id: 1, title: 'First Article' }, { id: 2, title: 'Second Article' }, ]; return { props: { articles, }, }; } export default Articles;
En este ejemplo, getStaticProps
se ejecuta en el momento de la construcción y obtiene una lista de artículos que se pasan como props al componente Articles
.
Generación de Rutas Dinámicas
Next.js también permite generar rutas dinámicas utilizando la función getStaticPaths
junto con getStaticProps
.
Ejemplo: Rutas Dinámicas
Supongamos que queremos generar páginas para cada artículo individual. Primero, creamos un archivo [id].js
en el directorio pages/articles
:
// pages/articles/[id].js import React from 'react'; const Article = ({ article }) => { return ( <div> <h1>{article.title}</h1> <p>{article.content}</p> </div> ); }; export async function getStaticPaths() { // Simulamos una llamada a una API para obtener los IDs de los artículos const articles = [ { id: 1 }, { id: 2 }, ]; const paths = articles.map((article) => ({ params: { id: article.id.toString() }, })); return { paths, fallback: false }; } export async function getStaticProps({ params }) { // Simulamos una llamada a una API para obtener los datos del artículo const article = { id: params.id, title: `Article ${params.id}`, content: `This is the content of article ${params.id}.`, }; return { props: { article, }, }; } export default Article;
En este ejemplo, getStaticPaths
genera las rutas dinámicas basadas en los IDs de los artículos, y getStaticProps
obtiene los datos de cada artículo individual.
Construcción y Despliegue
Para construir y desplegar tu sitio estático, ejecuta el siguiente comando:
Este comando generará los archivos HTML estáticos en el directorio out
. Luego, puedes desplegar estos archivos en cualquier servidor estático o CDN.
Conclusión
La Generación de Sitios Estáticos (SSG) con Next.js es una técnica poderosa para mejorar el rendimiento y la SEO de tus aplicaciones web. Al pre-renderizar las páginas en el momento de la construcción, puedes servir contenido rápidamente y reducir la carga en tus servidores. En esta sección, hemos cubierto los conceptos básicos de SSG y cómo implementarlo en Next.js, incluyendo la creación de páginas estáticas y rutas dinámicas.
Resumen
- SSG: Pre-renderiza páginas en el momento de la construcción.
- Ventajas: Mejor rendimiento, SEO optimizado, mayor seguridad.
- Funciones Clave:
getStaticProps
ygetStaticPaths
. - Construcción:
npm run build
para generar archivos estáticos.
Con estos conocimientos, estás listo para aprovechar al máximo la generación de sitios estáticos en tus proyectos de Next.js. ¡Adelante!
Curso de React
Módulo 1: Introducción a React
- ¿Qué es React?
- Configuración del Entorno de Desarrollo
- Hola Mundo en React
- JSX: Extensión de Sintaxis de JavaScript
Módulo 2: Componentes de React
- Entendiendo los Componentes
- Componentes Funcionales vs de Clase
- Props: Pasando Datos a Componentes
- State: Gestión del Estado del Componente
Módulo 3: Trabajando con Eventos
- Manejo de Eventos en React
- Renderizado Condicional
- Listas y Claves
- Formularios y Componentes Controlados
Módulo 4: Conceptos Avanzados de Componentes
- Elevando el Estado
- Composición vs Herencia
- Métodos del Ciclo de Vida de React
- Hooks: Introducción y Uso Básico
Módulo 5: Hooks de React
Módulo 6: Enrutamiento en React
Módulo 7: Gestión del Estado
- Introducción a la Gestión del Estado
- API de Contexto
- Redux: Introducción y Configuración
- Redux: Acciones y Reductores
- Redux: Conectando a React
Módulo 8: Optimización del Rendimiento
- Técnicas de Optimización del Rendimiento en React
- Memorización con React.memo
- Hooks useMemo y useCallback
- División de Código y Carga Perezosa
Módulo 9: Pruebas en React
- Introducción a las Pruebas
- Pruebas Unitarias con Jest
- Pruebas de Componentes con React Testing Library
- Pruebas de Extremo a Extremo con Cypress
Módulo 10: Temas Avanzados
- Renderizado del Lado del Servidor (SSR) con Next.js
- Generación de Sitios Estáticos (SSG) con Next.js
- TypeScript con React
- React Native: Creación de Aplicaciones Móviles