Lewati ke konten utama

📮 Props di Vue.js

Props (property) adalah cara utama untuk mengirim data dari komponen parent (induk) ke komponen child (anak). Props bersifat satu arah (one-way), artinya child hanya bisa menerima, bukan mengubah nilai props secara langsung.


📦 1. Contoh Dasar Props

Komponen Anak: HelloUser.vue

<template>
<p>Halo, {{ name }}!</p>
</template>

<script>
export default {
props: ['name']
}
</script>

Komponen Parent:

<template>
<HelloUser name="Andi" />
</template>

<script>
import HelloUser from './HelloUser.vue';

export default {
components: { HelloUser }
}
</script>

🧠 2. Props Bersifat Read-Only

Jika kamu mencoba mengubah nilai prop di child:

this.name = 'Baru'; // ❌ akan muncul warning!

Gunakan data lokal untuk menyalin props jika perlu:

data() {
return {
localName: this.name
};
}

✅ 3. Validasi Props

Vue mendukung validasi props berdasarkan:

  • Tipe data

  • Wajib/tidaknya

  • Default value

  • Fungsi validator

Contoh:

props: {
name: {
type: String,
required: true
},
age: {
type: Number,
default: 0
},
email: {
type: String,
validator: value => value.includes('@')
}
}

✏️ 4. Binding Dinamis

Props bisa diisi secara dinamis menggunakan v-bind atau shorthand :.

<HelloUser :name="userName" />
data() {
return {
userName: 'Dina'
};
}

🧩 5. Boolean Props

Vue otomatis mengenali boolean props saat digunakan tanpa value.

<my-button primary />
props: {
primary: Boolean
}

📋 6. Default Value vs Required

PropertiFungsi
required: trueWajib diisi oleh parent
defaultNilai default jika tidak diisi
Kedua opsi ini tidak boleh bertentangan — sebaiknya gunakan salah satu.

📌 Kesimpulan

  • Props adalah mekanisme komunikasi satu arah dari parent ke child.

  • Props bersifat read-only di child component.

  • Gunakan validasi props untuk menjaga integritas data.

  • Jangan modifikasi nilai prop secara langsung.