Kodeloka
  1. Kodeloka
  2. Kelas Next.js
  3. Materi

Routing & Layout ยท Modul 6 dari 23

Layouts, Templates, & Component Composition

Membuat nested layouts, memahami perbedaan state preservation pada Layout vs re-rendering pada Template.

๐ŸŽฏ Poin-Poin Utama Modul Ini:
  • Layout (layout.tsx) mempertahankan state komponen & scroll position saat berpindah route anak
  • Template (template.tsx) menciptakan instance baru & re-mount komponen di setiap navigasi
  • Nested Layouts memungkinkan pembagian struktur UI hierarkis (Dashboard Sidebar, Settings Tab)

๐Ÿ›๏ธ Konsep Layout vs Template

Dalam App Router, kita dapat menyusun UI secara hierarkis menggunakan Nested Layouts.

Perbedaan Kunci:
  • layout.tsx: Tidak mengalami re-render saat navigasi antar child route. Sangat cocok untuk Sidebar, Header, Footer.
  • template.tsx: Mengalami re-creation DOM & reset state setiap kali route berubah. Cocok untuk animasi CSS entry/exit (Page Transitions) atau tracking analytics per halaman.

๐Ÿ’ป Kode Contoh Nested Dashboard Layout

app/dashboard/layout.tsx
import Sidebar from "@/components/Sidebar";

export default function DashboardLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <div className="flex min-h-screen">
      <Sidebar />
      <main className="flex-1 p-8">{children}</main>
    </div>
  );
}