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.
Next übergibt diesen Wert an die Seite als eine Prop namens params:
// app/menu/[slug]/page.jsx
export default async function Dish({ params }) {
const { slug } = await params;
return <h1>{slug}</h1>;
}Drei Dinge passieren in dieser kleinen Datei:
- Die Page nimmt eine
params-Prop entgegen. Jede Page erhält eine, und bei einer dynamischen Route enthält sie die übereinstimmenden Segmente. paramsist in Next 15 ein Promise, daher verwendest duawaitdafür. Aus diesem Grund ist die Komponenteasync. Kapitel 5 erklärt, warum Pages das sein dürfen.- Durch Destructuring wird
slugextrahiert, dessen Name direkt vom 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 'use client'-ZeileClient-Teile klein haltenServer innerhalb von ClientZusammenfassung: Server & Client7Client-seitige Navigation
Der aktive LinkProgrammatisches RoutingFiltern mit der URLRoute-HandlerZusammenfassung: Navigation