Revalidasi: Menyegarkan Data yang Sudah Di-cache
Memakai revalidatePath dan revalidateTag agar data cache diperbarui tepat saat dibutuhkan.
Masalahnya
Data di-cache itu cepat, tapi bisa basi. Misal admin menambah produk baru, tapi halaman katalog masih menampilkan data lama karena cache belum kedaluwarsa. Solusinya: revalidasi, yaitu memaksa Next.js mengambil ulang data.
Revalidasi berbasis waktu
Cara paling sederhana, atur revalidate dalam detik saat fetch:
const res = await fetch("https://api.example.com/produk", {
next: { revalidate: 3600 }, // segarkan tiap 1 jam
});Ini disebut ISR (Incremental Static Regeneration). Pengunjung pertama setelah 1 jam mendapat halaman lama (cepat), lalu Next.js membangun ulang di background untuk pengunjung berikutnya.
Revalidasi on-demand
Untuk kontrol penuh, tandai fetch dengan tag lalu segarkan manual, misal setelah admin menyimpan data lewat Server Action:
// app/admin/actions.ts
"use server";
import { revalidateTag, revalidatePath } from "next/cache";
export async function tambahProduk(data: FormData) {
await simpanKeDatabase(data);
revalidateTag("produk"); // segarkan semua fetch bertag "produk"
revalidatePath("/katalog"); // segarkan halaman /katalog
}// saat fetch, beri tag
const res = await fetch("https://api.example.com/produk", {
next: { tags: ["produk"] },
});Pilih yang mana?
Pakai revalidate waktu untuk konten yang toleran basi (artikel, katalog). Pakai revalidateTag untuk aksi yang harus langsung terlihat (tambah/edit/hapus data oleh admin).
Kesalahan umum pemula
- Memanggil
revalidatePathdari Client Component. Fungsi ini hanya jalan di server (Server Action / Route Handler). Dari browser, panggil via Server Action. - Lupa memberi
tagssaat fetch. Tanpa tag,revalidateTagtidak punya target. Selalu pasangkan keduanya. - Revalidasi terlalu agresif. Memanggil revalidate setiap detik sama saja mematikan cache. Sesuaikan dengan seberapa sering data berubah.
Latihan singkat
- Buat Server Action
tambahKomentaryang menyimpan komentar dummy lalu memanggilrevalidatePath("/blog"). - Tambahkan
tags: ["komentar"]pada fetch komentar dan ganti revalidasi path menjadi revalidasi tag. Pastikan komentar baru langsung muncul.
Rangkuman
- Revalidasi menyegarkan data cache yang basi tanpa mematikan cache.
revalidate: Nuntuk penyegaran berbasis waktu (ISR).revalidateTag/revalidatePathuntuk penyegaran on-demand setelah mutasi data.- Fungsi revalidasi hanya bisa dipanggil di server, bukan dari Client Component.
Catatan teknis:
revalidatePathdanrevalidateTaghanya bisa dipanggil di Server Action atau Route Handler, tidak bisa di Client Component. Kalau butuh dari browser, panggil lewat Server Action sebagai perantara.