Menu
Coddy logo textTech

É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.

challenge icon

Défi

Moyen

Terminez Coddy Eats avec une recherche en direct.

  1. Complétez le fichier app/api/dishes/route.js en exportant async function GET() qui attend getDishes() et renvoie Response.json(dishes).
  2. Complétez le fichier components/SearchBox.jsx avec 'use client';, en conservant une chaîne query et un tableau matches dans l’état.
  3. Générez <input id="search-input" type="text"> lié à query. Lors d’une modification : si le texte est vide, effacez les résultats ; sinon, fetch('/api/dishes'), await response.json(), et conservez les plats dont le name contient le texte (sans tenir compte de la casse).
  4. Générez <ul id="search-results" className="reviews"> avec un <li> pour chaque résultat contenant un <Link> avec id={'match-' + dish.slug}, href={'/menu/' + dish.slug}, puis l’emoji, un espace et le nom.
  5. Générez <SearchBox /> dans le hero de app/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