Belajar memperlakukan file lokal sebagai database! Kita akan membuat artikel dalam format MDX, mem-parsing metadatanya, dan menampilkannya sebagai daftar post yang elegan di halaman blog.
1080m bacaanKuis WajibMicro Badge Lesson
Bab 2: Menghidupkan Konten, Menampilkan Daftar Artikel
"Panggung" kita sudah siap dari bab sebelumnya. Sekarang, saatnya kita memanggil para "aktor" ke atas panggung. Di bab ini, kita akan melakukan tiga hal penting:
Membuat file artikel pertama kita menggunakan format MDX.
Membangun "mesin" untuk membaca data dari file-file tersebut.
Menampilkan daftar artikel kita di halaman /blog.
Kita akan memperlakukan sistem file (folder di komputermu) seolah-olah itu adalah database kita. Ini adalah teknik yang sangat powerful untuk situs statis!
1. Membuat Artikel MDX Pertama Kita
MDX adalah gabungan dari Markdown dan JSX. Ini memungkinkan kita menulis konten dengan sintaks Markdown yang mudah, sambil tetap bisa menyisipkan komponen React jika diperlukan nanti.
Setiap file MDX akan memiliki dua bagian:
Frontmatter: Metadata atau "label" dari artikel (judul, tanggal, deskripsi) yang diapit oleh ---.
Content: Isi artikel itu sendiri.
Mari kita buat!
Di root folder proyekmu (sejajar dengan ), buat folder baru bernama .
src/
posts
Di dalam folder posts, buat file baru bernama halo-dunia.mdx dan isi dengan kode berikut:
mdx
---title: 'Halo Dunia, Ini Blog Baruku!'date: '2024-05-22'description: 'Ini adalah artikel pertama yang saya tulis di blog canggih yang dibangun dengan Next.js dan MDX.'---# Selamat Datang di Blog SayaIni adalah paragraf pertama dari artikel saya. Menulis dengan Markdown itu sangat menyenangkan dan intuitif.Kamu bisa membuat daftar seperti ini:- Poin satu- Poin dua- Poin tigaDan juga menambahkan blok kode:```javascriptconsole.log("Hello from my new blog!");
Hebat! Untuk membuat daftar kita terlihat lebih hidup, buat 1-2 file artikel lagi di dalam folder `posts`, misalnya `tips-react.mdx` dan `kenapa-nextjs.mdx`. Pastikan untuk mengubah isi `frontmatter`-nya agar unik.
## 2. Membaca Data Artikel dengan Helper Function
Bagaimana cara aplikasi Next.js kita membaca file-file `.mdx` tersebut? Kita akan membuat sebuah fungsi helper. Ini adalah "otak" di balik sistem "file-system as a database" kita.
#### A. Instalasi `gray-matter`
Untuk memisahkan *frontmatter* dari konten, kita butuh library kecil yang hebat bernama `gray-matter`.
Hentikan server (Ctrl+C) dan jalankan:
```bash
npm install gray-matter
B. Membuat File Utilitas
Di dalam folder src/, buat folder baru bernama lib. Folder ini biasa digunakan untuk menyimpan fungsi-fungsi helper atau logika bisnis.
Di dalam src/lib, buat file baru bernama post-utils.ts (ingat, kebab-case!).
Isi file src/lib/post-utils.ts dengan kode berikut:
typescript
// src/lib/post-utils.tsimport fs from "fs";import path from "path";import matter from "gray-matter";// Menentukan path ke direktori 'posts'const postsDirectory = path.join(process.cwd(), "posts");export function getAllPosts() { // Membaca semua nama file di dalam direktori 'posts' const fileNames = fs.readdirSync(postsDirectory); const allPostsData = fileNames.map((fileName) => { // Membuat slug dari nama file (menghapus ekstensi .mdx) const slug = fileName.replace(/\.mdx$/, ""); // Membaca konten file sebagai string const fullPath = path.join(postsDirectory, fileName); const fileContents = fs.readFileSync(fullPath, "utf8"); // Menggunakan gray-matter untuk mem-parsing frontmatter const matterResult = matter(fileContents); // Menggabungkan data frontmatter dengan slug return { slug, ...(matterResult.data as { title: string; date: string; description: string }), }; }); // Mengurutkan post berdasarkan tanggal (terbaru di atas) return allPostsData.sort((a, b) => { if (new Date(a.date) < new Date(b.date)) { return 1; } else { return -1; } });}
Fungsi getAllPosts ini sekarang menjadi satu-satunya sumber kebenaran kita untuk mendapatkan daftar semua artikel.
3. Menampilkan Daftar Artikel di Halaman Blog
Waktunya menampilkan hasil kerja keras kita ke pengguna!
A. Membuat Komponen post-card
Praktik terbaik adalah memecah UI menjadi komponen kecil. Mari buat kartu untuk setiap post.
Karena BlogPage adalah Server Component secara default, kita bisa langsung memanggil fungsi getAllPosts() di dalamnya. Next.js akan mengeksekusinya di sisi server saat halaman di-request.
Jalankan npm run dev dan buka http://localhost:3000/blog. Voila! Kamu seharusnya melihat daftar semua artikel yang telah kamu buat, ditampilkan dengan rapi dalam kartu-kartu yang bisa diklik.
Rangkuman & Langkah Selanjutnya
Fantastis! Di bab ini, kita telah:
✅ Membuat konten blog nyata dengan format MDX dan frontmatter.
✅ Membangun fungsi helper untuk membaca dan mem-parsing data dari sistem file.
✅ Merancang komponen post-card yang reusable.
✅ Menampilkan daftar artikel yang terurut rapi di halaman /blog.
Tentu saja, saat ini jika kamu mengklik kartu-kartu tersebut, kamu akan mendapatkan error 404. Itu karena kita belum membuat halaman untuk menampilkan isi dari masing-masing artikel.
Itulah yang akan menjadi fokus kita di bab selanjutnya: menguasai rute dinamis dan me-render konten MDX!
Checkpoint KuisTarget: 70%
Kuis Menampilkan Daftar Artikel
Kuis ini wajib untuk sertifikat. Kamu tetap bisa lanjut ke pelajaran berikutnya dan mengerjakannya nanti.