É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
MoyenTerminez Coddy Eats avec une recherche en direct.
- Créez
app/api/dishes/route.jsexportant uneasync function GET()qui attendgetDishes()et renvoieResponse.json(dishes). - Créez
components/SearchBox.jsxavec'use client';, contenant une chaînequeryet un tableaumatchesdans l'état (state). - Affichez
<input id="search-input" type="text">lié àquery. Lors du changement : si le texte est vide (empty), effacez les correspondances ; sinon effectuez unfetch('/api/dishes'),await response.json(), et conservez les plats dont lenamecontient le texte (sans tenir compte de la casse). - Affichez
<ul id="search-results" className="reviews">avec un<li>par correspondance contenant un<Link>avecid={'match-' + dish.slug},href={'/menu/' + dish.slug}, et l'emoji, un espace, puis le nom. - Affichez
<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