Étape 9 : Recherche en temps réel
Fait partie de la section L'essentiel de Next.js du Journey React de Coddy. Leçon 47 sur 47.
Défi
MoyenTermine Coddy Eats avec une recherche en direct.
- Complète le fichier
app/api/dishes/route.jsen exportantasync function GET()qui attendgetDishes()et renvoieResponse.json(dishes). - Complète le fichier
components/SearchBox.jsxavec'use client';, en conservant une chaînequeryet un tableaumatchesdans l’état. - Affiche
<input id="search-input" type="text">lié àquery. Lors d’une modification : si le texte est vide, efface les correspondances ; sinon, utilisefetch('/api/dishes'),await response.json(), et conserve les plats dont lenamecontient le texte (sans tenir compte de la casse). - Affiche
<ul id="search-results" className="reviews">avec un élément<li>par correspondance, contenant un<Link>avecid={'match-' + dish.slug},href={'/menu/' + dish.slug}, puis l’emoji, un espace et le nom. - Affiche
<SearchBox />à l’intérieur du hero dansapp/page.jsx.
Essayez vous-même
import Link from 'next/link';
import './globals.css';
export const metadata = {
title: {
default: 'Coddy Eats',
template: '%s | Coddy Eats',
},
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
<nav className="nav">
<Link className="brand" href="/">Coddy Eats</Link>
<Link id="nav-menu" href="/">Menu</Link>
<Link id="nav-desserts" href="/?category=dessert">Desserts</Link>
</nav>
<div className="container">
{children}
</div>
</body>
</html>
);
}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.js2Routage et liens
Les dossiers sont des routesRoutes imbriquéesLier des pagesRoutes dynamiquesPages non trouvéesRécapitulatif : Routage