Dynamische Routen
Teil des Abschnitts Next.js Essentials der React-Journey von Coddy. Lektion 8 von 47.
Ein Menü mit vierzig Gerichten bekommt nicht vierzig Ordner. Sie möchten, dass /menu/pizza, /menu/pasta und /menu/tiramisu dieselbe Seite sind, die unterschiedliche Daten anzeigt.
Das bedeuten eckige Klammern in einem Ordnernamen:
app/
menu/
[slug]/
page.jsx -> /menu/pizza
-> /menu/pasta
-> /menu/anything-at-allEin normaler Ordner entspricht seinem eigenen Namen. Ein Ordner mit [eckigen Klammern] entspricht jedem beliebigen Segment und merkt sich, womit er übereingestimmt hat. Das Wort in den Klammern ist der Name, unter dem Sie es auslesen: [slug] gibt Ihnen slug, [id] gibt Ihnen id.
Als Nächstes übergibt es diesen Wert als eine params genannte Prop an die Seite:
// app/menu/[slug]/page.jsx
export default async function Dish({ params }) {
const { slug } = await params;
return <h1>{slug}</h1>;
}Drei Dinge geschehen in dieser winzigen Datei:
- Die Seite nimmt eine
params-Prop entgegen. Jede Seite erhält eine, und bei einer dynamischen Route enthält sie die übereinstimmenden Segmente. paramsist in Next 15 ein Promise, daher verwendest duawaitdarauf. Deshalb ist die Komponenteasync. Kapitel 5 erklärt, warum Seiten dies sein dürfen.- Durch Destrukturierung wird
slugherausgezogen, dessen Name direkt aus dem Ordner[slug]stammt.
Rufen Sie /menu/pasta auf und slug ist "pasta". Eine Datei, jedes Gericht.
Aufgabe
EinfachDer dynamische Ordner ist bereits vorhanden: app/menu/[slug]/page.jsx antwortet auf jede URL unter /menu. Das Problem ist, dass es immer pizza anzeigt, egal welches Gericht aufgerufen wurde.
- Mache die Komponente
async. - Lies das passende Segment mit
const { slug } = await params;aus. - Rendere
sluginnerhalb von<h1 id="dish">anstelle des fest codierten Textes.
Die Tests rufen zwei verschiedene Gerichte auf und erwarten zwei verschiedene Überschriften.
Probier es selbst
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Next.js Essentials
4Server & Client
Zwei Arten von KomponentenDen Fehler lesenDie Zeile „use client“Client-Teile klein haltenServer innerhalb des ClientsRückblick: Server & Client7Clientseitige Navigation
Der aktive LinkProgrammatisches RoutingFiltern mit der URLRoute-HandlerRückblick: Navigation2Routing & Links
Ordner sind RoutenVerschachtelte RoutenSeiten verknüpfenDynamische RoutenNicht-gefunden-SeitenRückblick: Routing