Gestionnaires de routes
Fait partie de la section L'essentiel de Next.js du Journey React de Coddy. Leçon 37 sur 47.
Les composants serveur couvrent la plupart des besoins en données, car ils s’exécutent déjà sur le serveur. Mais parfois, le navigateur doit demander des données plus tard, après un clic, une fois que la zone de recherche s’est stabilisée, et pour cela, vous avez besoin d’un point de terminaison à appeler.
Un dossier contenant un fichier route.js devient exactement cela. Même règle de routage que pour les pages, mais avec un fichier spécial différent :
app/
api/
dishes/
route.js -> /api/dishesÀ l'intérieur, vous exportez une fonction nommée d'après la méthode HTTP :
import { dishes } from '../../../lib/dishes.js';
export async function GET() {
return Response.json(dishes);
}Response.json(...) est la réponse complète : elle sérialise la valeur et définit le type de contenu JSON. Vous pouvez également exporter POST, PUT, DELETE depuis ce même fichier.
Ensuite, la partie client est du code navigateur ordinaire :
const res = await fetch('/api/dishes');
const data = await res.json();Deux choses à bien distinguer. Un dossier peut contenir un page.jsx ou un route.js, jamais les deux : ils revendiqueraient tous les deux la même URL. Et route.js n'est pas un composant : il renvoie une Response, pas du JSX.
Utilisez un gestionnaire de routes lorsque le navigateur a besoin de données à la demande, ou lorsqu’un élément externe à votre application doit l’appeler. Si un composant serveur peut simplement lire les données lors du rendu, laissez-le faire.
Défi
MoyenCrée une petite API et appelle-la depuis le navigateur.
- Dans
app/api/dishes/route.js, exporte uneasync function GETqui renvoiedishesau format JSON. - Dans
components/DishLoader.jsx, termineloadDishes: récupère/api/dishes, lis le corps JSON et stocke les noms des plats avecsetNames.
Cliquer sur #load-btn doit remplir #dish-list avec les quatre noms.
Essayez vous-même
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de L'essentiel de Next.js
1Pourquoi Next.js
Ce que Next.js apporteLe dossier AppVotre première pageRécapitulatif : Pourquoi Next.js4Serveur & Client
Deux types de composantsLire l'erreurLa ligne 'use client'Garder les parties client de petite tailleServeur dans le clientRécapitulatif : Serveur & Client7Navigation côté client
Le lien actifRoutage programmatiqueFiltrage avec l'URLGestionnaires de routesRécapitulatif : Navigation2Routage et liens
Les dossiers sont des routesRoutes imbriquéesLier des pagesRoutes dynamiquesPages non trouvéesRécapitulatif : Routage