{"id":267895,"date":"2022-11-11T14:13:00","date_gmt":"2022-11-11T11:13:00","guid":{"rendered":"https:\/\/howto.mediadoma.com\/?p=267895"},"modified":"2025-03-14T21:31:36","modified_gmt":"2025-03-14T18:31:36","slug":"so-erstellen-sie-dynamische-routen-in-next-js","status":"publish","type":"post","link":"https:\/\/howto.mediadoma.com\/de\/so-erstellen-sie-dynamische-routen-in-next-js\/","title":{"rendered":"So erstellen Sie dynamische Routen in Next.js"},"content":{"rendered":"\n<p>Dynamische Routen sind Seiten, die es Ihnen erm\u00f6glichen, benutzerdefinierte Parameter in einer URL zu verwenden. Sie sind besonders n\u00fctzlich beim Erstellen von Seiten f\u00fcr dynamische Inhalte.<\/p>\n<p>F\u00fcr einen Blog k\u00f6nnen Sie eine dynamische Route verwenden, um URLs basierend auf den Titeln der Blogbeitr\u00e4ge zu erstellen. Dieser Ansatz ist besser als das Erstellen einer Seitenkomponente f\u00fcr jeden Beitrag.<\/p>\n<p>Sie k\u00f6nnen dynamische Routen in Next.js erstellen, indem Sie zwei Funktionen definieren: getStaticProps und getStaticPaths.<\/p>\n<h2>Erstellen einer dynamischen Route in Next.js<\/h2>\n<p>Um eine dynamische Route in Next.js zu erstellen, f\u00fcgen Sie einer Seite Klammern hinzu. Zum Beispiel [params].js, [slug].js oder [id].js.<\/p>\n<p>F\u00fcr einen Blog k\u00f6nnten Sie einen Slug f\u00fcr die dynamische Route verwenden. Wenn also ein Beitrag den Slug <strong>dynamic-routes-nextjs<\/strong> h\u00e4tte, w\u00e4re die resultierende URL <a href=\"https:\/\/example.com\/dynamic-routes-nextjs\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/example.com\/dynamic-routes-nextjs<\/a>.<\/p>\n<p>Erstellen Sie im Seitenordner eine neue Datei mit dem Namen [slug].js und erstellen Sie die Post-Komponente, die die Post-Daten als Requisite verwendet.<\/p>\n<pre><code>const Post = ({ postData }) =&gt; {  return &lt;div&gt;{\/* content *\/}&lt;\/div&gt;;};<\/code><\/pre>\n<p>Es gibt verschiedene M\u00f6glichkeiten, wie Sie die Postdaten an die Post \u00fcbergeben k\u00f6nnen. Welche Methode Sie w\u00e4hlen, h\u00e4ngt davon ab, wie Sie die Seite rendern m\u00f6chten. Um die Daten w\u00e4hrend der Erstellungszeit abzurufen, verwenden Sie getStaticProps() und um sie auf Anfrage abzurufen, verwenden Sie getServerSideProps().<\/p>\n<h2>Verwenden von getStaticProps zum Abrufen von Post-Daten<\/h2>\n<p>Blogbeitr\u00e4ge \u00e4ndern sich nicht so oft und es reicht aus, sie zur Erstellungszeit abzurufen. \u00c4ndern Sie also die Post-Komponente so, dass sie getStaticProps() enth\u00e4lt.<\/p>\n<pre><code>import { getSinglePost } from \"..\/..\/utils\/posts\"; const Post = ({ content }) =&gt; {  return &lt;div&gt;{\/* content *\/}&lt;\/div&gt;;}; export const getStaticProps = async ({ params }) =&gt; {    const post = await getSinglePost(params.slug);    return {      props: { ...post },    };  };<\/code><\/pre>\n<p>Die getStaticProps-Funktion generiert die auf der Seite gerenderten Beitragsdaten. Es verwendet den Slug aus den von der getStaticPaths-Funktion generierten Pfaden.<\/p>\n<h2>Verwenden von getStaticPaths zum Abrufen von Pfaden<\/h2>\n<p>Die Funktion getStaticPaths() gibt die Pfade f\u00fcr die Seiten zur\u00fcck, die vorgerendert werden sollen. \u00c4ndern Sie die Post-Komponente, um sie einzuschlie\u00dfen:<\/p>\n<pre><code>export const getStaticPaths = async() =&gt; {  const paths = getAllPosts().map(({ slug }) =&gt; ({ params: { slug } }));  return {    paths,    fallback: false,  };};<\/code><\/pre>\n<p>Diese Implementierung von getStaticPaths ruft alle Posts ab, die gerendert werden sollen, und gibt die Slugs als Parameter zur\u00fcck.<\/p>\n<p>Insgesamt sieht [slug].js so aus:<\/p>\n<pre><code>import { getAllPosts, getSinglePost } from \"..\/..\/utils\/posts\"; const Post = ({ content }) =&gt; {  return &lt;div&gt;{content}&lt;\/div&gt;;}; export const getStaticPaths = async() =&gt; {  const paths = getAllPosts().map(({ slug }) =&gt; ({ params: { slug } }));  return {    paths,    fallback: false,  };}; export const getStaticProps = async ({ params }) =&gt; {  const post = await getSinglePost(params.slug);   return {    props: { ...post },  };}; export default Post;<\/code><\/pre>\n<p>Sie m\u00fcssen getStaticProps() und getStaticPaths() zusammen verwenden, um eine dynamische Route zu erstellen. Die Funktion getStaticPaths() sollte die dynamischen Routen generieren, w\u00e4hrend getStaticProps() die auf jeder Route gerenderten Daten abruft.<\/p>\n<h2>Erstellen verschachtelter dynamischer Routen in Next.js<\/h2>\n<p>Um eine verschachtelte Route in Next.js zu erstellen, m\u00fcssen Sie einen neuen Ordner im Seitenordner erstellen und die dynamische Route darin speichern.<\/p>\n<p>Um beispielsweise \/pages\/posts\/dynamic-routes-nextjs zu erstellen, speichern Sie [slug].js in <strong>\/pages\/posts.<\/strong><\/p>\n<h2>Zugriff auf URL-Parameter von dynamischen Routen<\/h2>\n<p>Nachdem Sie die Route erstellt haben, k\u00f6nnen Sie den <a href=\"https:\/\/www.makeuseof.com\/what-is-a-url\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">URL-Parameter<\/a> aus der dynamischen Route mit dem Hook useRouter() <a href=\"https:\/\/www.makeuseof.com\/react-hooks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a> abrufen .<\/p>\n<p>F\u00fcr die Seiten\/[slug].js erhalten Sie den Slug wie folgt:<\/p>\n<pre><code>import { useRouter } from 'next\/router' const Post = () =&gt; {  const router = useRouter()  const { slug } = router.query  return &lt;p&gt;Post: {slug}&lt;\/p&gt;} export default Post<\/code><\/pre>\n<p>Dadurch wird der Slug des Beitrags angezeigt.<\/p>\n<h2>Dynamisches Routing mit getServerSideProps<\/h2>\n<p>Mit Next.js k\u00f6nnen Sie Daten zur Build-Zeit abrufen und dynamische Routen erstellen. Sie k\u00f6nnen dieses Wissen verwenden, um Seiten aus einer Liste von Elementen vorab zu rendern.<\/p>\n<p>Wenn Sie bei jeder Anfrage Daten abrufen m\u00f6chten, verwenden Sie getServerSideProps anstelle von getStaticProps. Beachten Sie, dass dieser Ansatz langsamer ist; Sie sollten es nur verwenden, wenn Sie regelm\u00e4\u00dfig wechselnde Daten verbrauchen.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Aufnahmequelle:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/www.makeuseof.com\" class=\"external external_icon\">www.makeuseof.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Erh\u00f6hen Sie die Flexibilit\u00e4t Ihres Routings mit einer schnellen URL-Pr\u00fcfung.<\/p>\n","protected":false},"author":1,"featured_media":265549,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[2930],"tags":[3058],"class_list":["post-267895","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programmierung","tag-affiai-de"],"_links":{"self":[{"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/posts\/267895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/comments?post=267895"}],"version-history":[{"count":1,"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/posts\/267895\/revisions"}],"predecessor-version":[{"id":313840,"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/posts\/267895\/revisions\/313840"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/media\/265549"}],"wp:attachment":[{"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/media?parent=267895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/categories?post=267895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/howto.mediadoma.com\/de\/wp-json\/wp\/v2\/tags?post=267895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}