Implementierung von getStaticPaths
Zuerst richten wir die Dateien ein:
- Erstelle eine Datei namens
[id].js
im Verzeichnispages/posts
. - Entferne außerdem
first-post.js
im Verzeichnispages/posts
— wir werden diese nicht mehr verwenden.
Öffne dann pages/posts/[id].js
in deinem Editor und füge den folgenden Code ein. Die ...
werden wir später ausfüllen:
import Layout from '../../components/layout';
export default function Post() {
return <Layout>...</Layout>;
}
Öffne anschließend lib/posts.js
und füge die folgende getAllPostIds
-Funktion am Ende hinzu. Sie gibt die Liste der Dateinamen (ohne .md
) im posts
-Verzeichnis zurück:
export function getAllPostIds() {
const fileNames = fs.readdirSync(postsDirectory);
// Gibt ein Array zurück, das so aussieht:
// [
// {
// params: {
// id: 'ssg-ssr'
// }
// },
// {
// params: {
// id: 'pre-rendering'
// }
// }
// ]
return fileNames.map((fileName) => {
return {
params: {
id: fileName.replace(/\.md$/, ''),
},
};
});
}
Wichtig: Die zurückgegebene Liste ist nicht einfach ein Array von Strings — es muss ein Array von Objekten sein, die wie im obigen Kommentar beschrieben aussehen. Jedes Objekt muss den Schlüssel params
enthalten und ein Objekt mit dem Schlüssel id
(weil wir [id]
im Dateinamen verwenden). Andernfalls schlägt getStaticPaths
fehl.
Zum Schluss importieren wir die getAllPostIds
-Funktion und verwenden sie innerhalb von getStaticPaths
. Öffne pages/posts/[id].js
und kopiere den folgenden Code oberhalb der exportierten Post
-Komponente:
import { getAllPostIds } from '../../lib/posts';
export async function getStaticPaths() {
const paths = getAllPostIds();
return {
paths,
fallback: false,
};
}
paths
enthält das Array der bekannten Pfade, die vongetAllPostIds()
zurückgegeben werden, einschließlich der vonpages/posts/[id].js
definierten Parameter. Mehr dazu in derpaths
-Key-Dokumentation- Ignoriere
fallback: false
vorerst — wir werden das später erklären.
Wir sind fast fertig — aber wir müssen noch getStaticProps
implementieren. Das machen wir auf der nächsten Seite!