Route-Handler
Teil des Abschnitts Next.js Essentials der React-Journey von Coddy. Lektion 37 von 47.
Server-Komponenten decken die meisten Datenbedürfnisse ab, da sie bereits auf dem Server laufen. Aber manchmal muss der Browser Daten erst später anfragen, nach einem Klick, nachdem sich ein Suchfeld beruhigt hat, und dafür benötigen Sie einen Endpunkt, den Sie aufrufen können.
Ein Ordner mit einer route.js darin wird genau dazu. Dieselbe Routing-Regel wie bei Seiten, aber eine andere spezielle Datei:
app/
api/
dishes/
route.js -> /api/dishesIm Inneren exportieren Sie eine Funktion, die nach der HTTP-Methode benannt ist:
import { dishes } from '../../../lib/dishes.js';
export async function GET() {
return Response.json(dishes);
}Response.json(...) ist die gesamte Antwort: Es serialisiert den Wert und setzt den JSON-Content-Type. Sie können auch POST, PUT, DELETE aus derselben Datei exportieren.
Dann ist die Client-Hälfte gewöhnlicher Browser-Code:
const res = await fetch('/api/dishes');
const data = await res.json();Zwei Dinge, die Sie beachten sollten. Ein Ordner kann eine page.jsx oder eine route.js enthalten, niemals beides: Beide würden dieselbe URL beanspruchen. Und route.js ist keine Komponente: Es gibt eine Response zurück, kein JSX.
Greife auf einen Routen-Handler zurück, wenn der Browser Daten bei Bedarf benötigt oder wenn etwas außerhalb deiner App darauf zugreifen muss. Wenn eine Serverkomponente die Daten einfach beim Rendern lesen kann, dann lass sie das tun.
Aufgabe
MittelErstelle eine kleine API und rufe sie vom Browser aus auf.
- Exportiere in
app/api/dishes/route.jseineasync function GET, diedishesals JSON zurückgibt. - Vervollständige in
components/DishLoader.jsxloadDishes: Rufe/api/dishesab, lies den JSON-Body und speichere die Gerichtsnamen mitsetNames.
Durch Klicken auf #load-btn müssen alle vier Namen in #dish-list eingefügt werden.
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: Navigation