Props: Kirim Paket Data 📦
Props (singkatan dari Properties) adalah cara Component saling ngobrol. Lebih tepatnya: Cara Parent (Induk) ngirim data ke Child (Anak).
Analogi GoFood 🛵
Bayangin lo mesen GoFood. Lo (Parent) pesen ke Driver (Child):
- "Bang, beli Nasi Goreng."
- "Pedesnya Level 5."
- "Jangan pake timun."
Instruksi itu adalah Props. Driver (Component) cuma jalanin tugas sesuai instruksi yang lo kasih.
1. Masalah Tanpa Props (Hardcode) 😫
Misal lo mau bikin Kartu Nama. Kalau lo tulis namanya langsung di dalem component, lo harus bikin banyak component buat orang yang beda-beda.
// Component A
function KartuOtong() {
return <h1>Halo, saya Otong</h1>;
}
// Component B
function KartuSentot() {
return <h1>Halo, saya Sentot</h1>;
}BOROS KODINGAN! Bayangin kalau ada 1000 karyawan. Masa bikin 1000 function?
2. Solusi Pake Props (Dinamis) 😎
Kita bikin Satu Cetakan aja, tapi isinya bisa berubah tergantung data yang dikirim.
Langkah 1: Child Menerima Data
Di function component, tambahin parameter props.
// Menerima paket bernama 'props'
function Kartu(props) {
// props itu bentuknya Object: { nama: "...", job: "..." }
return (
<div className="card">
<h1>Halo, saya {props.nama}</h1>
<p>Pekerjaan: {props.job}</p>
</div>
);
}Langkah 2: Parrent Mengirim Data
Pas make component-nya, kita kasih "Atribut" HTML (ini yang disebut ngirim props).
export default function App() {
return (
<div>
{/* Kirim data Otong */}
<Kartu nama="Otong" job="Programmer" />
{/* Kirim data Sentot (Pake cetakan yang sama!) */}
<Kartu nama="Sentot" job="Kang Bakso" />
{/* Kirim data Siti */}
<Kartu nama="Siti" job="HRD Galak" />
</div>
);
}3. Destructuring (Cara Gaul) ✨
Nulis props.nama, props.job, props.hobi itu capek. Programmer React biasanya langsung bongkar paketnya di pintu masuk.
// ✅ Cara Modern (Langsung ambil isinya)
function Kartu({ nama, job }) {
return (
<div className="card">
{/* Gak perlu nulis 'props.' lagi */}
<h1>Halo, saya {nama}</h1>
<p>Pekerjaan: {job}</p>
</div>
);
}4. Aturan Suci Props 📜
Props itu READ-ONLY (Gak Boleh Diubah Anak).
Child cuma boleh TERIMA dan TAMPILKAN. Child GAK BOLEH ngubah data yang dikirim parrentnya.
❌ Salah (Durhaka):
function Kartu({ nama }) {
nama = "Joko"; // ERROR! Gak boleh ngubah props.
return <h1>{nama}</h1>;
}Kalau mau data yang bisa berubah (misal: skor game, isi form), jangan pake Props. Pake State (Materi selanjutnya).
5. Props Spesial: children 👶
Pernah mikir kenapa kita nulis tombol kayak gini: <button>Klik Saya</button> Bukan kayak gini: <button text="Klik Saya" /> ?
Itu karena React punya props spesial bernama children. Isi apapun yang ada di Antara Tag Pembuka dan Penutup akan masuk ke props.children.
// Komponen Pembungkus (Wrapper)
function KotakSpesial({ children }) {
return (
<div style={{ border: "5px solid red", padding: "20px" }}>
{children} {/* Konten yang diselipin bakal muncul di sini */}
</div>
);
}
// Cara Pakai
export default function App() {
return (
<KotakSpesial>
<h1>Judul ini dibungkus kotak merah!</h1>
<p>Paragraf ini juga kena.</p>
</KotakSpesial>
);
}