DIPERBARUI: 2026-11-06
[B2-M2]Menengahā± 40 Mnt Baca + 60 Mnt Praktik

Next.js App Router: Server vs Client Components, Routing & SSR Metadata

Membongkar Arsitektur Hibrida Next.js 16: Async Params, generateMetadata & Route Handlers

BAGIKAN MODUL:
[KONTRAK HASIL BELAJAR // B2-M2]Standar Kompetensi Industri
ā± 40 Mnt Bacaā€¢āš” 60 Mnt Praktik•Lulus: ≄ 80/100 Poin

01. Target Pembelajar & Prasyarat

Developer web yang ingin menguasai arsitektur produksi Next.js 16 App Router (sebagaimana digunakan di Z-Automation).

02. Kompetensi Konseptual (Level 1–2)

  • āœ“Membedakan kapan sebuah komponen harus dirender di server (RSC) vs kapan harus menggunakan direktif 'use client'.
  • āœ“Menjelaskan mengapa crawler WhatsApp/LinkedIn/X membutuhkan tag Open Graph yang dirender di server (generateMetadata).

03. Kompetensi Praktis & Artefak Nyata (Level 3–4)

  • āœ“Mengimplementasikan halaman dinamis di Next.js 16 dengan menangani params: Promise<{ slug: string }> secara asinkron (await params).
  • āœ“Membangun pasangan Server Page + Client Interactive Estimator + Route Handler API (POST /api/orders) lengkap.
Artefak yang Dibangun: Fitur kalkulator estimator layanan interaktif dengan SSR Open Graph di Next.js 16.

04. Aplikasi Nyata & Verifikasi

Penerapan Industri: Arsitektur persis yang menggerakkan halaman /katalog dan rute edukasi Z-Automation.

Metode Verifikasi: Memeriksa output HTML mentah untuk memverifikasi tag og:image dan menguji pengiriman form.

[BAGIAN 01 // MASALAH & URGENSI ARSITEKTURAL]

Mengapa Subjek Ini Krusial dalam Rekayasa Nyata?

Pelajari cara memisahkan Server Components (Zero-Bundle Size) dan Client Components ('use client'), menghasilkan kartu Open Graph dinamis, dan menghubungkan REST API.

Dalam lingkungan produksi, kegagalan memahami batas-batas arsitektur sistem sering kali menyebabkan bug yang sulit dilacak, pemborosan biaya komputasi, atau antarmuka yang lambat bagi pengguna.

[BAGIAN 02 // MEKANISME DI BALIK LAYAR]

Bagaimana Sistem Sebenarnya Bekerja di Tingkat Protokol

Batas Arsitektur Server vs Client di Next.js 16

Salah satu lompatan terbesar dalam rekayasa web modern adalah pemisahan tegas antara Server Components dan Client Components.

Secara default, seluruh komponen di dalam direktori `src/app/` adalah Server Components. Kode di dalamnya dieksekusi murni di server node/edge: ia dapat membaca sistem file, menyambung ke database rahasia, dan menyusun tag `<meta>` untuk SEO. Yang dikirim ke browser hanyalah HTML dan data streaming ringan tanpa membengkakkan ukuran bundel JavaScript.

Ketika kita membutuhkan interaktivitas pengguna (seperti `useState`, slider kalkulator, atau klik tombol), kita membuat 'Pulau Interaktif' menggunakan direktif `'use client'` di baris teratas file tersebut.

PERINGATAN NEXT.JS 16 // ASYNC PARAMS CONTRACT

Sesuai aturan AGENTS.md, pada Next.js 16, props `params` dan `searchParams` bersifat asinkron (`Promise`). Selalu tulis: `const { slug } = await params;` sebelum membaca propertinya.

[DIAGRAM TEKNIS SVG INTERAKTIF // DIAG-06]

Batas Arsitektur Server vs Client di Next.js 16 App Router

LANGKAH 1 DARI 4
ENTITAS AKTIF:Klien -> Server Next.js
01
02
03
04

Browser meminta URL /edukasi-demo/paket-01 melalui HTTP GET.

[LIVE PAYLOAD INSPECTOR]JSON 2026
{
  "method": "GET",
  "path": "/edukasi-demo/paket-01",
  "headers": {
    "accept": "text/html"
  }
}
[BAGIAN 03 // MATRIKS KESALAHPAHAMAN]

Koreksi Asumsi Umum vs Realitas Rekayasa

ƗASUMSI KELIRU

ā€œMenambahkan 'use client' berarti komponen tersebut hanya berjalan di browser dan tidak dirender di server sama sekali.ā€

āœ“REALITAS SISTEM

Client Component tetap dirender menjadi HTML awal di server (SSR untuk pre-render), lalu mengalami 'hydration' di browser untuk mengikat event listener.

ƗASUMSI KELIRU

ā€œKita bisa mengakses params.slug secara sinkron seperti di Next.js 14 lama.ā€

āœ“REALITAS SISTEM

Di Next.js 15 dan 16, params dan searchParams adalah Promise asinkron dan wajib di-await.

[BAGIAN 04 // LABORATORIUM PRAKTIS & KODE]

Implementasi Langkah-demi-Langkah

Hasil akhir yang diharapkan: Halaman katalog dinamis berfitur SSR Open Graph dan kalkulator interaktif klien.

STRUKTUR PROYEK DIREKOMENDASIKAN:
src/app/edukasi-demo/[slug]/
ā”œā”€ā”€ page.tsx
└── EstimatorClient.tsx

1Membangun Server Page dengan Metadata Open Graph

Server component asinkron dengan penanganan Promise params.

page.tsx•tsx
āœ“Tested Successfully
LINGKUNGAN TERUJI: Next.js 16.4.330 BARIS KODE
1// src/app/edukasi-demo/[slug]/page.tsx
2import type { Metadata } from 'next';
3import EstimatorClient from './EstimatorClient';
4
5type PageProps = {
6 params: Promise<{ slug: string }>;
7};
8
9export async function generateMetadata({ params }: PageProps): Promise<Metadata> {
10 const { slug } = await params;
11 return {
12 title: `Paket ${slug.toUpperCase()} — Z-Automation`,
13 description: 'Estimasi biaya pembuatan website interaktif modern.',
14 openGraph: {
15 title: `Paket ${slug.toUpperCase()} | Z-Automation`,
16 description: 'Dapatkan kalkulasi instan dan arsitektur 3D WebGL.',
17 images: ['/assets/images/katalog/paket-05-corporate-store.jpg']
18 }
19 };
20}
21
22export default async function Page({ params }: PageProps) {
23 const { slug } = await params;
24 return (
25 <main style={{ maxWidth: 800, margin: '0 auto', padding: 32 }}>
26 <h1>Konfigurasi Paket: {slug}</h1>
27 <EstimatorClient initialSlug={slug} />
28 </main>
29 );
30}
KEPUTUSAN ARSITEKTURAL UTAMA:
• Pemisahan file Client Island: Memastikan logika server dan metadata tidak terkontaminasi oleh bundle browser.
PERINTAH EKSEKUSI TERMINAL:
$ Diuji pada rute Next.js App Router.
OUTPUT YANG DIHARAPKAN:
Halaman dengan metadata OG valid dan formulir interaktif responsif.
[BAGIAN 05 // PANDUAN TROUBLESHOOTING & TANTANGAN]

Mengantisipasi Masalah Umum & Tantangan Ekstensi

Pesan Error: Error: Route params should be awaited
Penyebab: Membaca params.slug langsung tanpa await
Solusi Eksak: Gunakan const { slug } = await params.
⚔ TANTANGAN EKSTENSI MANDIRI:

Hubungkan tombol submit ke endpoint POST /api/orders.

[RUBRIK EVALUASI KOMPETENSI 100 POIN // B2-M2]

Uji Kompetensi Mandiri & Verifikasi Hasil

Standar kelulusan Z-Automation mewajibkan skor minimum 80 / 100 Poin dengan komponen Implementasi Praktis minimal 21 / 35 Poin (60%). Jawab soal diagnostik dan centang hasil pengujian praktis Anda.

BAGIAN A // PERTANYAAN DIAGNOSTIK KONSEPTUAL & TEKNIS (40 POIN)

01.Mengapa kita tidak boleh menambahkan 'use client' di baris paling atas file page.tsx yang memuat generateMetadata()?

BAGIAN B // DAFTAR PERIKSA HASIL IMPLEMENTASI PRAKTIS (35 POIN — MIN. 21 POIN)

Centang item di bawah ini hanya jika Anda telah menjalankan kode di komputer Anda dan mengamati output yang benar:

Lanjutkan Menggulir
untuk Eksplorasi
Edukasi & Lab
Halaman Selanjutnya