Rutas Dinámicas en Next.js: Usando [slug], generateStaticParams y Params Tipados
# Introducción
Las rutas dinámicas en Next.js permiten crear páginas con URLs personalizadas que contienen variables, como un slug único para cada artículo. Esto es ideal para blogs, catálogos o cualquier contenido con identificadores únicos. En este artículo, verás cómo implementar rutas dinámicas con `slug`, `generateStaticParams` y parámetros tipados en TypeScript, incluyendo ejemplos prácticos con su salida esperada.
## ¿A quién va dirigido?
Este contenido está diseñado para desarrolladores que ya manejan Next.js y quieren profundizar en rutas dinámicas. Si buscas automatizar la generación de URLs o mejorar la mantenibilidad de tu aplicación, este artículo te aportará valor.
## Qué aprenderás
- Cómo crear rutas dinámicas con `[slug]` en Next.js.
- Uso de `generateStaticParams` para pre-renderizar páginas estáticamente.
- Implementación de parámetros tipados para evitar errores en tiempo de ejecución.
- Ejemplos con salida verificable.
## Creando Rutas Dinámicas con [slug]
En Next.js, una ruta dinámica se define agregando `[slug]` a la ruta. Por ejemplo, `pages/blog/[slug].js` generará una página para cada slug que cumpla con el patrón.
### Ejemplo de archivo `pages/blog/[slug].js`:
```javascript
// pages/blog/[slug].js
import { useRouter } from 'next/router';
const BlogPost = () => {
const router = useRouter();
const { slug } = router.query;
if (!slug) {
return <h1>Error 404: Artículo no encontrado</h1>;
}
// Aquí accedemos al contenido usando el slug
const content = getPostBySlug(slug); // Función que obtendría datos de una base de datos
return <div>Artículo: {content.title}</div>;
};
export default BlogPost;Salida esperada:
Si visitas http://tu-dominio.com/blog/mi-primer-post, verás:
Artículo: Mi Primer PostGenerando Parámetros Estáticos con generateStaticParams
Para optimizar el rendimiento, Next.js permite pre-renderizar páginas estáticamente. generateStaticParams permite definir cuáles slugs deben generarse durante el build.
Paso 1: Definir la función generateStaticParams
// En `pages/blog/[slug].js`
export async function getStaticPaths() {
// Simulamos obtener slugs desde una base de datos
const allPosts = await fetchPostsFromDatabase();
const paths = allPosts.map(post => `/blog/${post.slug}`);
return {
paths,
// Cada ruta será pre-renderizada
fallback: 'blocking'
};
}Paso 2: Uso de getStaticPaths
// En `pages/_app.js`
export default function MyApp({
Component, pageProps
}) {
return <Component {...pageProps} />;
};
// En `next.config.js`
export default {
generateStaticParams: {
'/blog/[slug]': () => getStaticPaths() // Reutiliza la función anterior
}
};Salida esperada durante el build:
Next.js generará automáticamente páginas estáticas para cada slug en allPosts, como:
/blog/mi-primer-post
/blog/segundo-articuloParámetros Tipados con TypeScript
Usar TypeScript en rutas dinámicas evita errores en tiempo de ejecución. Definimos una interfaz para los parámetros de la ruta.
Ejemplo con TypeScript:
// pages/blog/[slug].tsx
export interface BlogPostParams {
slug: string;
}
const BlogPost: React.FC<BlogPostParams> = ({ slug }) => {
const content = getPostBySlug(slug);
return <div>Título: {content.title}</div>;
};
export default BlogPost;Salida esperada:
Si el slug no existe, Next.js lanzará un error 404 automáticamente si no se maneja en el componente.
Casos Prácticos y Ejemplos Adicionales
Ejemplo 1: Rutas dinámicas con subrutas
// pages/blog/[slug]/details.js
const Details = () => {
const { slug } = useRouter().query;
return <h2>Detalles del artículo: {slug}</h2>;
};Salida:
Acceder a http://tu-dominio.com/blog/mi-primer-post/details mostrará:
Detalles del artículo: mi-primer-postEjemplo 2: Validación de slugs
// En getStaticPaths
const validSlugs = ['mi-primer-post', 'segundo-articulo'];
const paths = validSlugs.map(slug => `/blog/${slug}`);Salida:
Solo se generarán rutas para los slugs en validSlugs.
Buenas Prácticas
- Usa slugs cortos y descriptivos.
- Combina
generateStaticParamscongetStaticPropspara Content Freshness. - Valida siempre los slugs en tiempo de ejecución.
Conclusión
Las rutas dinámicas en Next.js con slug, generateStaticParams y params tipados ofrecen flexibilidad y rendimiento. Al seguir estas prácticas, optimizarás la generación de contenido estático y reducirás errores en tu aplicación. ¡Prueba implementando estos conceptos en tu próximo proyecto!
Próximos Pasos
- Explora
getStaticPropspara datos en tiempo real. - Aprende a manejar errores 404 personalizados.
DUGLAS MORENO
Comentarios (0)
Sé el primero en comentar.