Komponen Pertamamu — React

Coba liat aplikasi Tokopedia di HP. Ada navbar atas, search bar, banner promo, kartu produk yang berderet, footer. Bayangin tiap bagian itu ditulis terpisah…

Komponen adalah potongan tampilan yang punya nama dan bisa dipakai berulang kali. Di React, komponen cuma function JavaScript yang namanya diawali huruf kapital dan mengembalikan JSX. Mirip stempel: dibuat sekali, dicap berkali-kali, dan tiap capnya sama persis. Kalau desain stempelnya diubah, semua cap berikutnya ikut berubah.

🧪 Tebakan cepat: kamu membuat function greeting() (huruf kecil semua) yang mengembalikan <p>Selamat datang!</p>, lalu menulis <greeting /> di App. Apa yang tampil? Jawabannya ada di bagian "Kenapa harus huruf kapital".

Bikin komponen, lalu pakai

function Greeting() {
  return <p>Selamat datang!</p>
}

function App() {
  return (
    <div>
      <Greeting />
      <Greeting />
      <Greeting />
    </div>
  )
}

DOM yang dibuat React:

<div>
  <p>Selamat datang!</p>
  <p>Selamat datang!</p>
  <p>Selamat datang!</p>
</div>

Komponen juga boleh ditulis dengan arrow function: const Greeting = () => <p>Selamat datang!</p>. Hasilnya sama.

Kenapa harus huruf kapital

Di pelajaran JSX kamu sudah tahu tiap tag diubah jadi React.createElement(...). Huruf pertama nama tag menentukan apa yang dikirim:

JSX Jadi Artinya
<Greeting /> React.createElement(Greeting) panggil function Greeting
<greeting /> React.createElement("greeting") buat elemen HTML bernama greeting

Nama berhuruf kecil dianggap nama tag HTML dan dikirim sebagai teks "greeting". Function-mu gak pernah dipanggil. React membuat elemen <greeting></greeting> yang kosong, jadi gak ada yang tampil, dan di console muncul peringatan The tag <greeting> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter. Itu jawaban tebakannya: gak muncul apa-apa.

Jadi nama komponen selalu PascalCase: huruf kapital di awal tiap kata, seperti Greeting, ProductCard, dan UserAvatar.

Merakit halaman dari beberapa komponen

function Header() {
  return (
    <header>
      <h1>Hyper Sheets</h1>
    </header>
  )
}

function Footer() {
  return (
    <footer>
      <p>© 2026</p>
    </footer>
  )
}

function App() {
  return (
    <div>
      <Header />
      <Greeting />
      <Footer />
    </div>
  )
}

Kapan sebuah bagian dijadikan komponen? Kalau bagian itu dipakai di lebih dari satu tempat (tombol, kartu produk, navbar), atau kalau satu komponen sudah terlalu panjang untuk dibaca. Teks pendek yang cuma muncul sekali boleh tetap di dalam App.

⚠️ Jebakan yang sering ketemu

TL;DR: Komponen adalah function yang namanya diawali huruf kapital dan mengembalikan JSX, misalnya function Greeting() { return <p>Selamat datang!</p> }. Pakai dengan menulis <Greeting /> di dalam komponen lain; tiap tag berarti satu panggilan, dan nama komponennya gak ikut masuk DOM. Nama huruf kecil (<greeting />) dianggap tag HTML, jadi function-mu gak pernah dipanggil dan gak ada yang tampil. Halaman dirakit dari komponen yang ditulis terpisah: App (parent) memakai Header, Greeting, dan Footer (child). Tulis return ( dengan kurung di baris yang sama.

Yang akan kamu pelajari