Props Lanjutan
Selain cara dasar mengirim Props, React juga mendukung beberapa sintaks alternatif yang dapat membuat kode menjadi lebih fleksibel dan ringkas.
Pada materi ini kita akan membahas:
- Single Prop Object
- Rest Property (
...) - Default Prop Values
1. Mengirim Satu Objek sebagai Prop
Jika data sudah tersedia dalam bentuk Object, kita dapat mengirimkan seluruh Object tersebut sebagai satu Prop.
Misalnya terdapat data:
const concept = {
title: "Components",
description: "The core UI building block.",
image: componentsImg
};
Kita dapat mengirim Object tersebut menggunakan satu Prop:
<CoreConcept concept={concept} />
Atau jika menggunakan Array:
<CoreConcept concept={CORE_CONCEPTS[0]} />
Dengan cara ini, kita tidak perlu mengirimkan setiap property secara terpisah.
2. Menerima Single Prop Object
Di dalam Component, kita dapat menerima Prop tersebut menggunakan destructuring:
function CoreConcept({ concept }) {
return (
<li>
<img
src={concept.image}
alt={concept.title}
/>
<h3>{concept.title}</h3>
<p>{concept.description}</p>
</li>
);
}
Prop:
concept={concept}
akan menghasilkan Object yang dapat diakses melalui:
concept.title
concept.description
concept.image
3. Destructuring Object di Dalam Component
Kita juga dapat melakukan destructuring terhadap Object concept.
function CoreConcept({ concept }) {
const {
title,
description,
image
} = concept;
return (
<li>
<img
src={image}
alt={title}
/>
<h3>{title}</h3>
<p>{description}</p>
</li>
);
}
Dengan cara ini, kita tidak perlu menulis:
concept.title
concept.description
concept.image
berulang kali.
4. Kapan Menggunakan Single Prop Object?
Pendekatan ini sangat berguna ketika data sudah berbentuk Object.
Misalnya data dari API:
const product = {
id: 1,
name: "Laptop",
price: 10000000,
category: "Computer"
};
Daripada mengirim:
<Product
id={product.id}
name={product.name}
price={product.price}
category={product.category}
/>
kita dapat mengirim seluruh Object:
<Product product={product} />
Kemudian Component:
function Product({ product }) {
return (
<div>
<h2>{product.name}</h2>
<p>{product.price}</p>
<p>{product.category}</p>
</div>
);
}
Pendekatan ini dapat membuat hubungan antara data dan Component lebih jelas.
5. Mengelompokkan Props dengan Rest Property
JavaScript juga menyediakan Rest Property (...) yang dapat digunakan saat melakukan destructuring Object.
Misalnya Component menerima beberapa Props:
<CoreConcept
title="Components"
description="The core UI building block."
image={componentsImg}
/>
Kita dapat menerima semua Props tersebut sebagai satu Object:
function CoreConcept({ ...concept }) {
return (
<li>
<img
src={concept.image}
alt={concept.title}
/>
<h3>{concept.title}</h3>
<p>{concept.description}</p>
</li>
);
}
Rest Property:
...concept
mengumpulkan seluruh property yang tersisa menjadi Object bernama concept.
6. Memahami Rest Property
Misalnya kita memiliki:
const user = {
name: "Budi",
age: 30,
city: "Palu"
};
Kita dapat melakukan:
const {
name,
...details
} = user;
Hasilnya:
name
berisi:
Budi
Sedangkan:
details
berisi:
{
age: 30,
city: "Palu"
}
Rest Property digunakan untuk mengumpulkan property yang tersisa.
7. Rest Property pada Props
Konsep yang sama dapat digunakan pada React Component.
function Product({ title, ...details }) {
return (
<div>
<h2>{title}</h2>
<p>{details.price}</p>
<p>{details.category}</p>
</div>
);
}
Jika digunakan:
<Product
title="Laptop"
price={10000000}
category="Computer"
/>
maka secara konsep:
title = "Laptop";
details = {
price: 10000000,
category: "Computer"
};
8. Perbedaan Spread dan Rest
Operator yang digunakan terlihat sama:
...
Namun, fungsinya bergantung pada konteks penggunaannya.
Spread Operator
Spread digunakan untuk menyebarkan isi Array atau Object.
Contoh:
<Product {...product} />
Artinya property dari product disebarkan menjadi Props.
Rest Property
Rest digunakan untuk mengumpulkan property yang tersisa.
Contoh:
function Product({ title, ...details }) {
// ...
}
Artinya semua property selain title dikumpulkan ke dalam details.
Secara sederhana:
Spread
Object
│
├── title
├── price
└── category
↓
Menyebarkan
↓
Props
Rest
Props
│
├── title
├── price
└── category
↓
Mengumpulkan
↓
Object
9. Default Value pada Props
Terkadang sebuah Prop bersifat opsional.
Misalnya sebuah Button memiliki Prop:
type
Kita ingin memberikan nilai default jika type tidak dikirimkan.
Kita dapat menggunakan default value pada destructuring.
function Button({
caption,
type = "submit"
}) {
return (
<button type={type}>
{caption}
</button>
);
}
Jika type diberikan:
<Button
type="button"
caption="Click Me"
/>
maka:
type = "button"
Jika type tidak diberikan:
<Button caption="Click Me" />
maka React menggunakan:
type = "submit"
10. Contoh Default Props
function Button({
caption,
type = "submit"
}) {
return (
<button type={type}>
{caption}
</button>
);
}
Penggunaan pertama:
<Button
caption="Save"
type="submit"
/>
Hasil:
<button type="submit">
Save
</button>
Penggunaan kedua:
<Button caption="Save" />
Karena type tidak diberikan, nilai default digunakan:
submit
11. Default Value Hanya Digunakan Jika Nilai undefined
Default value akan digunakan ketika Prop tidak diberikan atau nilainya undefined.
Contoh:
function User({
name = "Guest"
}) {
return <h2>Hello {name}</h2>;
}
Jika:
<User />
maka:
Hello Guest
Jika:
<User name="Budi" />
maka:
Hello Budi
12. Contoh Lengkap
Berikut contoh Component yang menggunakan beberapa konsep sekaligus:
function Product({
name = "Unknown Product",
price = 0,
...details
}) {
return (
<div>
<h2>{name}</h2>
<p>
Harga: Rp{price}
</p>
<p>
Kategori: {details.category}
</p>
</div>
);
}
Kemudian:
<Product
name="Laptop"
price={10000000}
category="Computer"
/>
Secara konsep:
name = "Laptop";
price = 10000000;
details = {
category: "Computer"
};
13. Memilih Sintaks yang Tepat
Tidak ada satu sintaks yang selalu paling baik. Pilihan tergantung pada bentuk data dan kebutuhan Component.
Gunakan Single Prop Object
Jika data sudah berupa Object:
<Product product={product} />
Cocok untuk data seperti:
const product = {
name: "Laptop",
price: 10000000
};
Gunakan Spread Props
Jika seluruh property Object memang ingin diteruskan:
<Product {...product} />
Gunakan Rest Property
Jika ingin mengambil beberapa Props secara langsung dan mengumpulkan sisanya:
function Product({
name,
...details
}) {
// ...
}
Gunakan Default Value
Jika terdapat Prop opsional:
function Button({
type = "submit"
}) {
// ...
}
14. Poin Penting
Beberapa hal yang perlu diingat:
- Object dapat dikirim sebagai satu Prop.
- Single Prop Object cocok ketika data sudah terstruktur dalam Object.
- Rest Property (
...) dapat mengumpulkan Props yang tersisa menjadi satu Object. - Spread Operator (
...) digunakan untuk menyebarkan isi Object menjadi Props. - Meskipun menggunakan simbol yang sama, Spread dan Rest memiliki fungsi yang berbeda berdasarkan konteks.
- Default value dapat diberikan melalui destructuring.
- Default value digunakan ketika nilai Prop adalah
undefined. - Teknik-teknik ini membantu membuat Component lebih fleksibel dan reusable.
Kesimpulan
React menyediakan beberapa sintaks alternatif untuk mengelola Props.
Single Object:
<Product product={product} />
Spread Props:
<Product {...product} />
Rest Property:
function Product({
name,
...details
}) {
// ...
}
Default Value:
function Button({
type = "submit"
}) {
// ...
}
Dengan memahami Single Prop Object, Spread, Rest Property, dan Default Value, kita dapat memilih cara yang paling sesuai untuk mengirim dan mengelola data antar Component dalam aplikasi React.