9단계: 실시간 검색
Coddy React 여정의 Next.js 핵심 (Next.js Essentials) 섹션에 포함된 레슨. 47개 중 47번째.
챌린지
중급Coddy Eats에 실시간 검색 기능을 완성하세요.
app/api/dishes/route.js파일에서async function GET()을 내보내도록 완성하고,getDishes()를 기다린 후Response.json(dishes)를 반환하세요.components/SearchBox.jsx파일을'use client';와 함께 완성하고, 상태에query문자열과matches배열을 저장하세요.<input id="search-input" type="text">를 렌더링하고query에 연결하세요. 변경 시 텍스트가 비어 있으면 matches를 비우고, 그렇지 않으면fetch('/api/dishes')를 실행하고await response.json()을 사용한 다음,name에 해당 텍스트가 포함된 요리만 대소문자를 구분하지 않고 유지하세요.<ul id="search-results" className="reviews">를 렌더링하고, 일치하는 각 항목마다<li>를 하나씩 포함하세요. 각 항목에는id={'match-' + dish.slug},href={'/menu/' + dish.slug}와 이모지, 공백, 이름이 들어 있는<Link>를 포함하세요.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단계: 기본 셸 구성