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

Termine Coddy Eats avec une recherche en direct.

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