Menu
Coddy logo textTech

ステップ 3:料理ページ

CoddyのReactジャーニー「Next.js の基本」セクションの一部 — レッスン 41/47。

challenge icon

チャレンジ

中級

料理の各アイテムにページを作成してください。

  1. app/page.jsx で、各カードのコンテンツを id={'link-' + dish.slug} および href={'/menu/' + dish.slug} を持つ <Link> で包みます。
  2. app/menu/[slug]/page.jsx を作成します: const { slug } = await params; の後に await getDish(slug) を呼び出します。
  3. 料理が存在しない場合は、next/navigation から notFound() を呼び出します。
  4. 存在する場合は、<div id="dish-thumb" className="detail-thumb"> (絵文字 + gradient スタイル) を持つ <article className="detail"> をレンダリングし、その横に <h1 id="dish-name">'★'.repeat(dish.rating) を表示する <p id="dish-stars" className="stars"><p id="dish-desc">、および <span id="dish-price" className="price"> を配置します。
  5. 最外層の要素に id="dish-missing" および className="empty" を持つ app/menu/[slug]/not-found.jsx を作成します。

自分で試してみよう

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 の基本のすべてのレッスン