Tulis ‘use client’ di baris pertama file untuk mengubah Server Component menjadi Client Component di Next.js App Router. Tanpa itu, tombol, form, useState, dan useEffect tidak jalan karena semua component default dirender di server.
‘use client’ Bekerja untuk Apa di App Router
App Router memisahkan kode yang jalan di server dan di browser. Server Component menambil data dan merender HTML awal. Client Component melanjutkan interaksi setelah hydration.
Pakai Client Component ketika butuh:
useState,useReducer,useEffect,useRef- event seperti
onClick,onChange,onSubmit - browser API seperti
window,document,localStorage - form interaktif, counter, dropdown, modal, tab
Langkah Membuat Client Component yang Valid
Ikuti urutan ini agar tidak kena error:
- Buat file baru, misalnya
components/CounterButton.tsx. - Tulis
'use client'di baris pertama, sebelum semuaimport. - Tambahkan state dan event handler di dalam component.
- Import Client Component tersebut dari page atau Server Component.
'use client';
import { useState } from 'react';
export default function CounterButton() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
Klik: {count}
</button>
);
}
Aturan yang sering dilanggar:
- Jangan buat Client Component sebagai
async function. - Kirim props yang serializable saja seperti string, number, boolean, array, object polos.
- Jangan import modul server-only, misalnya akses database langsung, ke dalam file ini.
Kesalahan Umum dan Batasannya
| Masalah | Penyebab | Solusi |
|---|---|---|
| Client Component async | pakai async di component |
pindahkan fetch ke Server Component |
| Import server-only gagal | query database di file client | panggil lewat Server Action atau Route Handler |
| Props tidak terbaca | kirim fungsi atau class instance | kirim data polos saja |
Jangan tempel 'use client' ke semua file saat ada error. Persempit ke batas interaktif saja, misalnya form atau tombolnya, supaya page tetap mendapat keuntungan render server. Validasi data sensitif tetap jalan di server walau form sudah validasi di browser.
FAQ
Apakah semua file harus pakai ‘use client’?
Tidak. Pasang hanya pada component interaktif, biarkan page dan layout tetap Server Component.
Bolehkah Client Component fetch data?
Boleh untuk kebutuhan interaksi seperti pencarian atau paginasi, data awal sebaiknya tetap diambil dari server.
Di mana posisi ‘use client’ ditulis?
Selalu di baris pertama file sebelum import atau kode lain.