Menu
Coddy logo textTech

Passaggio 9: Ricerca in tempo reale

Fa parte della sezione Nozioni essenziali di Next.js del percorso React di Coddy. Lezione 47 di 47.

challenge icon

Sfida

Medio

Completa Coddy Eats con una ricerca in tempo reale.

  1. Completa il file app/api/dishes/route.js esportando async function GET(), che attende getDishes() e restituisce Response.json(dishes).
  2. Completa il file components/SearchBox.jsx con 'use client';, mantenendo nello stato una stringa query e un array matches.
  3. Visualizza <input id="search-input" type="text"> collegato a query. Al cambio: se il testo è vuoto, svuota matches; altrimenti fetch('/api/dishes'), await response.json() e mantieni i piatti il cui name contiene il testo (senza distinzione tra maiuscole e minuscole).
  4. Visualizza <ul id="search-results" className="reviews"> con un <li> per ogni corrispondenza, contenente un <Link> con id={'match-' + dish.slug}, href={'/menu/' + dish.slug} e l’emoji, uno spazio, poi il nome.
  5. Visualizza <SearchBox /> all’interno dell’hero in app/page.jsx.

Provalo tu

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>
    );
}

Tutte le lezioni di Nozioni essenziali di Next.js