Props
Props dalam React
Props atau Properties merupakan salah satu konsep dasar dan penting dalam React. Props digunakan untuk mengirimkan data dari parent component ke child component.
Dengan Props, sebuah component dapat menerima data dari luar sehingga component tersebut menjadi lebih dinamis dan reusable.
Konsep Props memiliki kemiripan dengan parameter pada function JavaScript.
Apa Itu Props?
Props adalah data yang dikirimkan dari sebuah component ke component lainnya.
Contoh sederhana:
function Welcome(props) {
return <h1>Hello {props.name}!</h1>;
}
Kemudian component tersebut digunakan:
<Welcome name="Budi" />
React akan mengirimkan:
{
name: "Budi"
}
sebagai Props ke component Welcome.
Hasilnya:
Hello Budi!
Props dan Parameter Function
Konsep Props dapat lebih mudah dipahami jika dibandingkan dengan parameter function JavaScript.
Function biasa:
function greet(name) {
return `Hello ${name}!`;
}
greet("Budi");
React Component:
function Welcome(props) {
return <h1>Hello {props.name}!</h1>;
}
<Welcome name="Budi" />
Perbedaannya adalah pada React, nilai dikirim melalui attribute JSX dan diterima oleh component melalui object props.
Mengapa Membutuhkan Props?
Props memiliki beberapa manfaat penting dalam pengembangan aplikasi React.
Reusability
Props memungkinkan satu component digunakan berkali-kali dengan data yang berbeda.
Misalnya:
<Product
title="Laptop"
price={10000000}
/>
<Product
title="Mouse"
price={250000}
/>
<Product
title="Keyboard"
price={750000}
/>
Kita hanya membutuhkan satu component:
function Product(props) {
return (
<div>
<h2>{props.title}</h2>
<p>Rp{props.price}</p>
</div>
);
}
Component Product dapat digunakan untuk berbagai produk.
Komponensialisasi
Props membantu kita memisahkan UI menjadi component-component kecil.
Contohnya:
App
├── Header
├── ProductList
│ ├── Product
│ ├── Product
│ └── Product
└── Footer
Product dapat menerima data dari ProductList melalui Props.
Dengan cara ini, setiap component dapat memiliki tanggung jawab yang lebih jelas.
Membuat Component yang Menerima Props
Untuk menerima Props, component dapat menerima parameter pada function.
Contoh:
function CoreConcept(props) {
return (
<li>
<img
src={props.image}
alt={props.title}
/>
<h3>{props.title}</h3>
<p>{props.description}</p>
</li>
);
}
Parameter:
props
merupakan object yang berisi seluruh data yang dikirimkan ke component tersebut.
Mengirim Props ke Component
Props dikirimkan melalui attribute pada saat component digunakan.
Contoh:
<CoreConcept
title="Components"
description="The core UI building block."
image={componentsImg}
/>
Pada contoh tersebut, terdapat tiga Props:
title
description
image
Secara konsep, React akan menyediakan object:
{
title: "Components",
description: "The core UI building block.",
image: componentsImg
}
kepada component CoreConcept.
Mengakses Props
Props dapat diakses menggunakan dot notation.
Contoh:
function CoreConcept(props) {
return (
<div>
<h2>{props.title}</h2>
<p>{props.description}</p>
</div>
);
}
Jika dipanggil:
<CoreConcept
title="Components"
description="Reusable UI building blocks."
/>
maka:
props.title
berisi:
Components
dan:
props.description
berisi:
Reusable UI building blocks.
Contoh Lengkap Props
Berikut contoh sederhana component CoreConcept.
function CoreConcept(props) {
return (
<li>
<img
src={props.image}
alt={props.title}
/>
<h3>{props.title}</h3>
<p>{props.description}</p>
</li>
);
}
Kemudian digunakan di App.jsx:
import componentsImg from "./assets/components.png";
function App() {
return (
<main>
<section id="core-concepts">
<h2>Core Concepts</h2>
<ul>
<CoreConcept
title="Components"
description="The core UI building block."
image={componentsImg}
/>
<CoreConcept
title="Props"
description="Make components reusable by passing data into them."
image={componentsImg}
/>
</ul>
</section>
</main>
);
}
Component yang sama:
<CoreConcept />
digunakan beberapa kali dengan data yang berbeda.
Props Dapat Berisi Berbagai Tipe Data
Props tidak hanya dapat digunakan untuk mengirimkan string.
Kita dapat mengirimkan berbagai tipe data JavaScript.
String
<User name="Budi" />
Number
Gunakan {}:
<User age={30} />
Boolean
<User isAdmin={true} />
atau bentuk singkat:
<User isAdmin />
Array
<User
hobbies={["Coding", "Running", "Reading"]}
/>
Object
<User
address={{
city: "Palu",
country: "Indonesia"
}}
/>
Function
Props juga dapat berisi function:
<Button
onClick={handleClick}
/>
Konsep ini sangat penting dalam React karena memungkinkan parent component memberikan data maupun behavior kepada child component.
Mengirim Nilai Dinamis
Jika nilai berasal dari variabel JavaScript, gunakan {}.
Contoh:
const title = "React";
const price = 100000;
<Product
title={title}
price={price}
/>
Sedangkan jika nilainya berupa string statis, tanda kutip dapat digunakan:
<Product
title="React"
price={100000}
/>
Perhatikan bahwa angka:
price={100000}
merupakan nilai number, sedangkan:
price="100000"
merupakan string.
Props dengan Gambar
Props juga dapat digunakan untuk mengirim gambar.
Misalnya:
import componentsImg from "./assets/components.png";
Kemudian:
<CoreConcept
title="Components"
description="The core UI building block."
image={componentsImg}
/>
Di dalam component:
function CoreConcept(props) {
return (
<img
src={props.image}
alt={props.title}
/>
);
}
Karena componentsImg merupakan variabel JavaScript, kita menggunakan:
image={componentsImg}
bukan:
image="componentsImg"
Nama Prop Harus Sesuai
Nama Props yang dikirim harus sesuai dengan nama property yang digunakan di dalam component.
Contoh:
<Product title="Laptop" />
maka di dalam component:
function Product(props) {
return <h2>{props.title}</h2>;
}
akan menghasilkan:
Laptop
Jika kita menggunakan:
props.name
sementara prop yang dikirim adalah:
title="Laptop"
maka:
props.name
akan menghasilkan:
undefined
Destructuring Props
Selain menggunakan:
props.title
props.description
props.image
kita juga dapat menggunakan Object Destructuring.
Contoh:
function CoreConcept({ title, description, image }) {
return (
<li>
<img
src={image}
alt={title}
/>
<h3>{title}</h3>
<p>{description}</p>
</li>
);
}
Cara ini lebih ringkas dan sangat umum digunakan dalam React modern.
Perhatikan perbedaannya.
Menggunakan props
function Product(props) {
return (
<h2>{props.title}</h2>
);
}
Menggunakan Destructuring
function Product({ title }) {
return (
<h2>{title}</h2>
);
}
Keduanya valid.
Props Bersifat Read-Only
Props sebaiknya dianggap sebagai data read-only.
Child component tidak seharusnya mengubah nilai Props yang diterimanya.
Contoh:
function Product(props) {
// Jangan melakukan:
// props.title = "New Title";
return <h2>{props.title}</h2>;
}
Jika data perlu diubah selama aplikasi berjalan, biasanya kita menggunakan State.
Konsep sederhananya:
Props
│
▼
Data dari Parent
│
▼
Child Component
Sedangkan State digunakan ketika component perlu mengelola data yang dapat berubah.
One-Way Data Flow
React menggunakan pola one-way data flow.
Data biasanya mengalir dari:
Parent
│
│ Props
▼
Child
Contoh:
function App() {
const userName = "Budi";
return (
<User name={userName} />
);
}
Kemudian:
function User({ name }) {
return <h2>Hello {name}</h2>;
}
Data mengalir dari App ke User.
Props untuk Membuat Component Reusable
Misalnya kita membuat component:
function Button({ text }) {
return (
<button>
{text}
</button>
);
}
Component tersebut dapat digunakan berkali-kali:
<Button text="Login" />
<Button text="Register" />
<Button text="Submit" />
Kita tidak perlu membuat tiga component berbeda.
Cukup satu component:
Button
dengan data yang berbeda melalui Props.
Props sebagai Parameter Component
Konsep Props dapat diringkas seperti function JavaScript.
Function:
function greet(name) {
return `Hello ${name}`;
}
Pemanggilan:
greet("Budi");
React Component:
function Welcome({ name }) {
return <h1>Hello {name}</h1>;
}
Pemanggilan:
<Welcome name="Budi" />
Perbedaannya hanya pada cara data diberikan, tetapi konsep dasarnya sama: memberikan input agar menghasilkan output yang dinamis.
Component Tree dan Props
Props sangat erat kaitannya dengan Component Tree.
Misalnya:
App
│
│ name="Budi"
▼
User
│
│ userId={10}
▼
Profile
Data dapat diteruskan dari parent ke child melalui Props.
Contoh:
function App() {
return (
<User
name="Budi"
userId={10}
/>
);
}
Kemudian:
function User({ name, userId }) {
return (
<Profile
name={name}
userId={userId}
/>
);
}
Poin Penting
Beberapa hal yang perlu diingat tentang Props:
- Props adalah singkatan dari Properties.
- Props digunakan untuk mengirim data dari parent ke child.
- Props diterima oleh component sebagai sebuah object.
- Props membuat component menjadi reusable.
- Props dapat berisi berbagai tipe data.
- Gunakan
{}untuk mengirim nilai JavaScript dinamis. - Nama prop harus sesuai dengan property yang digunakan di component.
- Props sebaiknya diperlakukan sebagai read-only.
- Data dalam React umumnya mengalir satu arah dari parent ke child.
- Props dapat menggunakan destructuring agar kode lebih ringkas.
Kesimpulan
Props merupakan mekanisme utama untuk mengirim data antar React Component.
Dengan Props, kita dapat membuat satu component yang reusable dan menggunakannya dengan data yang berbeda.
Konsep sederhananya:
Parent Component
│
│ Props
▼
Child Component
│
▼
Dynamic UI
Contoh:
function Product({ title, price }) {
return (
<div>
<h2>{title}</h2>
<p>Rp{price}</p>
</div>
);
}
Kemudian:
<Product
title="Laptop"
price={10000000}
/>
<Product
title="Mouse"
price={250000}
/>
Satu component dapat digunakan untuk berbagai data.
Setelah memahami Props, konsep berikutnya yang penting dipelajari adalah State, yaitu mekanisme React untuk menyimpan dan mengelola data yang dapat berubah selama aplikasi berjalan.