9단계: 실시간 검색
Coddy React 여정의 Next.js 핵심 (Next.js Essentials) 섹션에 포함된 레슨 — 47개 중 47번째.
챌린지
중급실시간 검색 기능으로 Coddy Eats를 완성하세요.
getDishes()를await하고Response.json(dishes)를 반환하는async function GET()을 내보내는app/api/dishes/route.js파일을 생성하세요.'use client';와 함께 상태(state)로query문자열과matches배열을 갖는components/SearchBox.jsx를 생성하세요.query에 바인딩된<input id="search-input" type="text">를 렌더링하세요. 변경 이벤트 발생 시: 텍스트가empty이면 매치 목록을 비우고, 그렇지 않으면fetch('/api/dishes')와await response.json()을 수행하여name에 해당 텍스트가 포함된(대소문자 구분 없이)dishes만 유지하세요.- 매치된 항목당
id={'match-' + dish.slug},href={'/menu/' + dish.slug}, 그리고emoji, 공백,name을 포함하는<Link>를 지닌<li>형태로<ul id="search-results" className="reviews">를 렌더링하세요. app/page.jsx의hero내부에<SearchBox />를 렌더링하세요.
직접 해보기
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>
);
}Next.js 핵심 (Next.js Essentials)의 모든 레슨
8프로젝트: Coddy Eats
1단계: 기본 셸 구성