Menu
CoddyTech

Komponen Asinkron

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

Inilah hasil dari semua yang disiapkan bab sebelumnya. Komponen server bisa bersifat async:

import { getDishes } from '../lib/data';

export default async function Page() {
    const dishes = await getDishes();

    return <h1>{dishes.length} dishes</h1>;
}

Baca itu sekali lagi, karena ini benar-benar hal baru. Komponen ini menunggu. Next.js menjalankannya di server, membiarkan await selesai, dan baru setelah itu mengubah hasilnya menjadi HTML.

Bandingkan dengan versi khusus browser yang biasanya kamu tulis:

  • Halaman pertama kali ditampilkan dalam keadaan kosong
  • Permintaan dikirim setelah halaman dimuat
  • Beberapa state berubah, lalu konten muncul, menimbulkan kedipan yang dilihat pengguna setiap kali

Dengan komponen server async, tidak ada render kosong pertama. Tidak ada yang bisa berubah menjadi tampilan berkedip, karena datanya sudah tersedia saat HTML dibuat. Tidak ada useEffect, tidak ada penanda pemuatan, tidak ada permintaan kedua.

Dua aturan membuat ini valid:

  • Hanya komponen server yang boleh menggunakan async: komponen yang ditandai 'use client' tidak boleh
  • Data harus berasal dari tempat yang dapat dijangkau server: database, file, atau module seperti lib/data.js
challenge icon

Tantangan

Mudah

lib/data.js sudah tersedia dan dikunci. File ini mengekspor getDishes(), yang mengembalikan promise untuk array berisi object { id, name }.

  1. Jadikan Page di app/page.jsx sebagai fungsi async.
  2. Gunakan await getDishes() untuk mengisi variabel dishes.
  3. Di dalam <ul id="dish-list">, tampilkan satu <li> untuk setiap hidangan, dengan key={dish.id}, id={dish.id}, dan name hidangan sebagai teksnya.

Tanpa useEffect, tanpa flag pemuatan, cukup gunakan await.

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