Conditional Rendering — React

Coba buka GoFood. Belum login — tampil tombol "Masuk". Udah login — tampil profil + saldo + alamat. Restoran tutup — tampil status "Closed" abu-abu, tombol…

Coba buka GoFood. Belum login — tampil tombol "Masuk". Udah login — tampil profil + saldo + alamat. Restoran tutup — tampil status "Closed" abu-abu, tombol pesan disabled. Buka — tampil rating + estimasi pengiriman, tombol pesan biru terang. Komponen yang sama ngrender beda berdasar kondisi. Itulah conditional rendering di React: tampilin UI berbeda tergantung state/props/data. Gak ada syntax khusus — pake JavaScript biasa: ternary, &&, atau early return.

💡 Tiga pattern utama. Pilih yang paling pas: ternary (a vs b), && (a atau gak ada), early return (multiple early exits). Tiap punya use case ideal — pemula sering pake && di mana-mana, tapi sering lebih tepat ternary.

1. Ternary — Dua Cabang

function App() {
  const isLoggedIn = true
  return <p>{isLoggedIn ? "Selamat datang!" : "Silakan login."}</p>
}

// Bisa render JSX kompleks
return (
  <div>
    {user
      ? <Profile user={user} />
      : <LoginForm />
    }
  </div>
)

2. Logical AND && — Render atau Skip

function App() {
  const items = ["A", "B"]
  return (
    <div>
      {items.length > 0 && <p>Ada {items.length} item</p>}
      {error && <ErrorMessage>{error}</ErrorMessage>}
    </div>
  )
}

3. Early Return — Banyak Exit Point

function UserProfile({ user, loading, error }) {
  if (loading) return <Spinner />
  if (error) return <ErrorPage>{error.message}</ErrorPage>
  if (!user) return <NotFound />
  return (
    <div>
      <h1>{user.name}</h1>
      <p>{user.bio}</p>
    </div>
  )
}

4. Object Lookup — Banyak Cabang

const statusUI = {
  loading: <Spinner />,
  error: <ErrorPage />,
  empty: <EmptyState />,
  ready: <ResultList />,
}

return <div>{statusUI[status]}</div>

🎭 Analogi sehari-hari

Conditional rendering itu kayak palang pintu di tol. Mobil dengan e-toll cukup → palang naik, lewat (isLoggedIn ? <Profile />). Mobil tanpa e-toll → tampilan beda, suruh bayar tunai (<LoginForm />). Mobil rusak — gak boleh masuk, tutup total (if (broken) return <Closed />). Sistem yang sama, beda kondisi, beda output. React tinggal cek kondisi tiap render, putuskan apa yang ditampilkan. Pintu tol gak tutup buka manual — automated berdasar data sensor. UI React juga reaktif — state berubah → conditional re-evaluate → UI update.

⚠️ Jebakan yang sering ditemui

🎯 Pilih pattern conditional — pakai mana?

  • Dua opsi (a atau b, tanpa exception) → ternary cond ? a : b
  • Render atau skip total&& (awas dengan 0/""!)
  • 2-3 exit point berurutan (loading → error → ready) → early return — paling readable
  • Banyak cabang exact match (status string) → object lookup { loading: ..., error: ... }[status]
  • Bagian kecil dari JSX besar → ternary inline atau extract ke variable

Aturan: kalau ternary mulai nested 3 level → udah saatnya extract ke fungsi helper atau pecah ke komponen.

TL;DR: Conditional rendering = pakai JavaScript biasa di JSX. Pattern: ternary a ? b : c (2 cabang), && (render atau skip), early return (multiple exits — paling clean buat loading/error/ready), object lookup (banyak cabang exact match). HATI-HATI && dengan number/string — 0 & "" falsy tapi tetep di-render. Nested ternary > 2 level = pecah jadi function atau object lookup.

Yang akan kamu pelajari