Gestori delle route
Fa parte della sezione Nozioni essenziali di Next.js del percorso React di Coddy. Lezione 37 di 47.
I componenti server coprono la maggior parte delle esigenze relative ai dati, perché vengono già eseguiti sul server. Ma a volte il browser deve richiedere dati in un secondo momento, dopo un clic, quando una casella di ricerca smette di aggiornarsi, e per questo serve un endpoint da chiamare.
Una cartella con un route.js al suo interno diventa esattamente quello. La stessa regola di routing delle pagine, ma con un file speciale diverso:
app/
api/
dishes/
route.js -> /api/dishesAll'interno, esporti una funzione che prende il nome dal metodo HTTP:
import { dishes } from '../../../lib/dishes.js';
export async function GET() {
return Response.json(dishes);
}Response.json(...) è l’intera risposta: serializza il valore e imposta il tipo di contenuto JSON. Puoi esportare anche POST, PUT, DELETE dallo stesso file.
Poi la parte del client è normale codice del browser:
const res = await fetch('/api/dishes');
const data = await res.json();Due cose da tenere a mente. Una cartella può contenere un page.jsx oppure un route.js, mai entrambi: rivendicherebbero entrambi lo stesso URL. E route.js non è un componente: restituisce una Response, non JSX.
Ricorri a un gestore di route quando il browser ha bisogno di dati su richiesta o quando qualcosa al di fuori della tua app deve effettuare una chiamata. Se un componente server può semplicemente leggere i dati durante il rendering, lascia che lo faccia.
Sfida
MedioCrea una piccola API e chiamala dal browser.
- In
app/api/dishes/route.js, esporta unaasync function GETche restituiscadishescome JSON. - In
components/DishLoader.jsx, completaloadDishes: recupera/api/dishes, leggi il corpo JSON e memorizza i nomi dei piatti consetNames.
Facendo clic su #load-btn si devono inserire tutti e quattro i nomi in #dish-list.
Provalo tu
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Nozioni essenziali di Next.js
4Server e Client
Due tipi di componentiLeggere l'erroreLa riga 'use client'Mantieni piccole le parti ClientServer dentro ClientRiepilogo: Server e Client7Navigazione lato client
Il link attivoRouting programmaticoFiltrare con l'URLGestori delle routeRiepilogo: navigazione2Routing e collegamenti
Le cartelle sono routeRoute annidateCollegare le pagineRoute dinamichePagine non trovateRiepilogo: routing5Dati sul server
Componenti asincroniIn attesa dei parametri della routeDue fetch contemporaneiStati di caricamentoGestione degli erroriRiepilogo: recupero dei dati8Progetto: Coddy Eats
Passaggio 1: La struttura