Props — React

Pernah pesen kopi di Starbucks? Kamu bilang ke barista: "Latte, ukuran tall, susu oat, no sugar". Barista (komponen) terima list parameter, bikin kopi sesuai…

Props adalah data yang dikirim komponen parent ke komponen child. Cara mengirimnya mirip atribut HTML: <Welcome name="Andi" />. Dengan props, satu komponen bisa menampilkan isi yang beda-beda. Mirip formulir pesanan kopi: formulirnya sama untuk semua pembeli, isiannya (nama, ukuran, gula) beda-beda, dan barista membuat kopi sesuai isian itu. Barista gak mencoret isian pembeli. Kalau pesanannya berubah, pembelinya yang mengisi formulir baru.

🧪 Tebakan cepat: App menulis <ProductCard title="Mouse" price="150000" />, dan di dalam ProductCard ada {price + ongkir} dengan ongkir bernilai 10000. Yang tampil 160000 atau yang lain? Jawabannya ada di bagian "Teks pakai kutip, nilai lain pakai kurung kurawal".

Kirim dari parent, terima di child

function Welcome({ name }) {
  return <h2>Halo, {name}!</h2>
}

function App() {
  return (
    <div>
      <Welcome name="Andi" />
      <Welcome name="Sari" />
    </div>
  )
}
Tag di App props yang diterima Welcome Hasil
<Welcome name="Andi" /> { name: "Andi" } <h2>Halo, Andi!</h2>
<Welcome name="Sari" /> { name: "Sari" } <h2>Halo, Sari!</h2>

Banyak props sekaligus

function ProductCard({ title, price, ongkir = 10000 }) {
  return (
    <div className="kartu">
      <h3>{title}</h3>
      <span className="price">{price}</span>
      <small>Total + ongkir: {price + ongkir}</small>
    </div>
  )
}

function App() {
  return (
    <div>
      <ProductCard title="Laptop" price={7500000} />
      <ProductCard title="Mouse" price={150000} />
      <ProductCard title="Headset" price={350000} ongkir={0} />
    </div>
  )
}
Kartu props Total + ongkir
Laptop { title: "Laptop", price: 7500000 } 7510000
Mouse { title: "Mouse", price: 150000 } 160000
Headset { title: "Headset", price: 350000, ongkir: 0 } 350000

Teks pakai kutip, nilai lain pakai kurung kurawal

Semua nilai selain teks dikirim lewat kurung kurawal:

<ProductCard
  title="Laptop"
  price={7500000}
  tersedia={true}
  tags={["promo", "baru"]}
  ongkir={ongkirKota}
/>

Props cuma boleh dibaca

Props milik parent. Child cuma membacanya, gak mengubahnya. Kalau ProductCard butuh judul lain, App yang mengirim title baru. Cara App mengubah datanya (dengan state dan event) ada di pelajaran-pelajaran berikutnya.

function ProductCard(props) {
  props.title = "Promo" // salah
  return <h3>{props.title}</h3>
}

⚠️ Jebakan yang sering ketemu

TL;DR: Props adalah data dari parent ke child, ditulis seperti atribut: <Welcome name="Andi" />. React mengumpulkannya jadi satu objek props; child membacanya dengan destructuring function Welcome({ name }) atau props.name. Teks pakai tanda kutip; angka, boolean, array, dan variabel pakai kurung kurawal (price={150000}), karena "150000" + 10000 jadi 15000010000. Nilai default { ongkir = 10000 } cuma dipakai kalau prop-nya gak dikirim. Props read-only: child gak mengubahnya, parent yang mengirim nilai baru.

Yang akan kamu pelajari