Menu
CoddyTech

Menunggu Parameter Route

Termasuk bagian Dasar-Dasar Next.js dalam perjalanan React di Coddy. Pelajaran 24 dari 47.

Rute dinamis memberikan segmen URL kepada halamanmu melalui params. Di Next 16, ada hal penting yang perlu kamu ingat:

params adalah sebuah promise.

// app/menu/[slug]/page.jsx
export default async function DishPage({ params }) {
    const { slug } = await params;
    // /menu/carbonara  ->  slug === 'carbonara'
}

Lupakan await dan tidak ada yang mengalami crash, inilah yang membuatnya sulit disadari. Melakukan destructuring pada promise hanya menghasilkan undefined:

const { slug } = params;   // undefined
const dish = await getDish(slug);   // tidak mencari apa pun

Halaman tetap dirender. Hanya saja halaman itu kosong, atau penuh dengan konten pengganti, dan kamu mencari bug di lapisan datamu yang sebenarnya tidak pernah ada.

Aturan yang sama berlaku untuk searchParams. Keduanya adalah promise, keduanya perlu ditunggu dengan await, dan keduanya hanya tersedia untuk komponen server async, satu alasan lagi mengapa halaman yang baru saja kamu tulis harus bersifat async.

Mengapa perlu menggunakan promise? Agar Next.js dapat mulai merender bagian-bagian halamanmu yang tidak bergantung pada URL sebelum selesai menentukan bagian-bagian yang bergantung pada URL.

challenge icon

Tantangan

Mudah

app/menu/[slug]/page.jsx hampir benar, tetapi tidak pernah menunggu params, sehingga setiap hidangan ditampilkan sebagai Unknown dish.

  1. Tunggu params sebelum melakukan destructuring: const { slug } = await params;

lib/data.js dan halaman beranda dikunci. Mengunjungi /menu/carbonara harus menampilkan Carbonara di #dish-name dan harganya di #dish-price.

Coba sendiri

import './globals.css';

export const metadata = {
    title: 'My App',
};

export default function RootLayout({ children }) {
    return (
        <html lang="en">
            <body>
                {children}
            </body>
        </html>
    );
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar Next.js