Svelte Props Events Export Let Createeventdispatcher Bind
Definisi
Komponen child menerima data lewat props (export let) dan mengembalikan sinyal ke parent lewat events (createEventDispatcher) atau langsung bind ke prop (two-way).
Kapan dipakai
- Props: kirim data satu arah parent → child.
- Event dispatcher: child perlu memberi tahu parent (klik, submit, selesai).
- bind:prop: child boleh mengubah nilai milik parent (gunakan hati-hati).
Cara kerja
Props
<!-- Child.svelte -->
<script>
export let title = "Default";
export let items = [];
</script>
<h2>{title}</h2><!-- Parent -->
<Child title="Halo" items={['a','b']} />Event ke parent
<!-- Child -->
<script>
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
function submit() {
dispatch('done', { ok: true });
}
</script>
<button on:click={submit}>Selesai</button><!-- Parent -->
<Child on:done={(e) => console.log(e.detail)} />Two-way bind
<!-- Child -->
<script>
export let value = '';
</script>
<input bind:value />
<!-- Parent -->
<Child bind:value={nama} />Struktur alur
Loading diagram...
Catatan implementasi
export letdengan default nilai jadi opsional prop.dispatch(nama, payload)→ parent baca dievent.detail.bind:hanya untuk prop yang memang boleh diubah child; jangan pakai untuk data yang harus dijaga parent.- Di Svelte 5,
export letbergeser kelet { title } = $props()(runes); pola di atas masih valid di Svelte 4.
Kesalahan umum
- Mengubah prop langsung tanpa bind: parent tidak tahu, UI parent stale.
- Lupa
event.detail: payload ada di.detail, bukan di event langsung. - Over-bind: terlalu banyak two-way membuat alur data sulit dilacak.
- Nama event bentrok: pakai nama deskriptif (
save,close), bukanclick.