馃Л Rutas din谩micas y pre-renderizado
Aprende a crear rutas din谩micas para tus posts y c贸mo pre-renderizar las p谩ginas para mejorar SEO y rendimiento.
馃搶 脥ndice de esta entrada:
- 馃搨 Qu茅 son las rutas din谩micas en Next.js
- 馃搫 Creando rutas din谩micas para cada post
- ⚡ Pre-renderizado con
getStaticPropsygetStaticPaths - 馃攧 Probando las p谩ginas pre-renderizadas
馃搨 Qu茅 son las rutas din谩micas en Next.js
Las rutas din谩micas permiten generar p谩ginas seg煤n un par谩metro de URL.
Por ejemplo, /posts/primer-post se genera autom谩ticamente a partir del nombre del archivo.
Next.js usa carpetas entre corchetes [param] para definir rutas din谩micas:
app/posts/[slug]/page.tsx
馃搫 Creando rutas din谩micas para cada post
En app/posts/[slug]/page.tsx, usamos el par谩metro slug para cargar el post correcto:
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
export default function Post({ params }: { params: { slug: string } }) {
const postsDirectory = path.join(process.cwd(), 'app/posts');
const filePath = path.join(postsDirectory, `${params.slug}.md`);
const fileContents = fs.readFileSync(filePath, 'utf8');
const { data, content } = matter(fileContents);
return (
<div className="p-6">
<h1 className="text-2xl font-bold mb-4">{data.title}</h1>
<p className="text-gray-700">{content}</p>
</div>
);
}
⚡ Pre-renderizado con getStaticProps y getStaticPaths
Next.js permite **pre-renderizar** p谩ginas en el momento de la compilaci贸n. Esto significa que tus posts estar谩n listos como HTML est谩tico, mejorando velocidad y SEO.
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';
export async function getStaticPaths() {
const postsDirectory = path.join(process.cwd(), 'app/posts');
const filenames = fs.readdirSync(postsDirectory);
const paths = filenames.map(name => ({
params: { slug: name.replace('.md', '') }
}));
return { paths, fallback: false };
}
export async function getStaticProps({ params }) {
const postsDirectory = path.join(process.cwd(), 'app/posts');
const filePath = path.join(postsDirectory, `${params.slug}.md`);
const fileContents = fs.readFileSync(filePath, 'utf8');
const { data, content } = matter(fileContents);
return { props: { data, content } };
}
Con esto, cada post se genera de manera est谩tica y se sirve r谩pido al usuario.
馃攧 Probando las p谩ginas pre-renderizadas
Ejecuta el servidor de desarrollo:
npm run dev
Abre http://localhost:3000/posts/primer-post y verifica que tu post se cargue correctamente, ahora ya como p谩gina pre-renderizada.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias