Implementar getStaticPaths
Primero, configuremos los archivos:
- Cree un archivo llamado
[id].js
dentro del directoriopages/posts
. - También, elimine
first-post.js
dentro del directoriopages/posts
— ya no lo usaremos.
Luego, abra pages/posts/[id].js
en su editor y pegue el siguiente código. Llenaremos los ...
más adelante:
import Layout from '../../components/layout';
export default function Post() {
return <Layout>...</Layout>;
}
A continuación, abra lib/posts.js
y agregue la siguiente función getAllPostIds
al final. Esta devolverá la lista de nombres de archivos (excluyendo .md
) en el directorio posts
:
export function getAllPostIds() {
const fileNames = fs.readdirSync(postsDirectory);
// Devuelve un array con este formato:
// [
// {
// params: {
// id: 'ssg-ssr'
// }
// },
// {
// params: {
// id: 'pre-rendering'
// }
// }
// ]
return fileNames.map((fileName) => {
return {
params: {
id: fileName.replace(/\.md$/, ''),
},
};
});
}
Importante: La lista devuelta no es solo un array de strings — debe ser un array de objetos con el formato mostrado en el comentario anterior. Cada objeto debe tener la clave params
y contener un objeto con la clave id
(porque estamos usando [id]
en el nombre del archivo). De lo contrario, getStaticPaths
fallará.
Finalmente, importaremos la función getAllPostIds
y la usaremos dentro de getStaticPaths
. Abra pages/posts/[id].js
y copie el siguiente código encima del componente Post
exportado:
import { getAllPostIds } from '../../lib/posts';
export async function getStaticPaths() {
const paths = getAllPostIds();
return {
paths,
fallback: false,
};
}
paths
contiene el array de rutas conocidas devuelto porgetAllPostIds()
, que incluye los params definidos porpages/posts/[id].js
. Más información en la documentación de la clavepaths
- Por ahora ignore
fallback: false
— lo explicaremos más adelante.
¡Ya casi terminamos! Pero todavía necesitamos implementar getStaticProps
. ¡Hagamos eso en la siguiente página!