Nicht-gefunden-Seiten
Teil des Abschnitts Next.js Essentials der React-Journey von Coddy — Lektion 9 von 47.
Eine dynamische Route ist übertrieben großzügig. app/menu/[slug]/page.jsx passt auf /menu/pizza und genauso problemlos auf /menu/asdfgh und rendert dann eine dish-Seite für ein dish, das gar nicht existiert.
Next.js bietet Ihnen beide Hälften der Lösung.
1. Der 404-Bildschirm. Eine Datei namens not-found.jsx, die demselben Club spezieller Dateinamen angehört wie page.jsx und layout.jsx:
// app/not-found.jsx
export default function NotFound() {
return <h1>We don't have that</h1>;
}Platzieren Sie es unter app/not-found.jsx, und es deckt die gesamte App ab: Jede URL, die mit nichts übereinstimmt, landet hier, anstatt auf der einfachen integrierten 404-Seite.
2. Der Auslöser. Manchmal passt die URL zu einer Route, aber die Daten existieren nicht. Das ist der Fall bei /menu/asdfgh, und nur Ihr Code kann das erkennen. Rufen Sie notFound() auf:
import { notFound } from 'next/navigation';
const dishes = ['pizza', 'pasta'];
export default async function Dish({ params }) {
const { slug } = await params;
if (!dishes.includes(slug)) {
notFound();
}
return <h1>{slug}</h1>;
}notFound() gibt keinen Wert zurück und Sie rufen nicht return dafür auf: Der Aufruf stoppt die Seite genau dort und zeigt das nächstgelegene not-found.jsx an. Alles nach dem if kann sicher davon ausgehen, dass das dish existiert, weshalb der Guard ganz oben steht.
Aufgabe
Mittel/menu/sushi rendert derzeit eine dish-Seite für ein dish, das nicht auf der Speisekarte steht. Schließe diese Lücke.
- Erstelle
app/not-found.jsx. Default-exportiere eine Komponente, die ein<h1>mitid="not-found-title"und dem exakten TextDish not foundzurückgibt. - Importiere in
app/menu/[slug]/page.jsxnotFoundausnext/navigation. - Wenn
slugnicht imdishes-Array enthalten ist, rufenotFound()auf, bevor irgendetwas gerendert wird.
/menu/pizza muss weiterhin funktionieren.
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: Navigation2Routing & Links
Ordner sind RoutenVerschachtelte RoutenSeiten verlinkenDynamische RoutenNicht-gefunden-SeitenZusammenfassung: Routing