- Apa Itu Component di Alpine.js?
- Tantangan: Bagaimana Komponen Saling Berkomunikasi?
- 1. Komunikasi dengan $dispatch
- 2. Komunikasi dengan Store Global ($store)
- 3. Mengakses Elemen via $refs
- Kesimpulan
Halo teman-teman semuanya, di seri sebelumnya, kita sudah belajar tentang transisi dan animasi di Alpine.js yang membuat tampilan lebih interaktif dan menarik. Kali ini, kita akan membahas topik yang penting untuk membuat aplikasi yang lebih modular dan terstruktur, yaitu Interaksi Antar Component.
Dalam Alpine.js, kita bisa membuat beberapa komponen kecil dan mandiri, lalu mengatur komunikasi di antara mereka. Hal ini sangat berguna ketika kita membangun aplikasi yang kompleks, seperti dashboard, form multi-step, atau komponen yang saling tergantung.
Apa Itu Component di Alpine.js?
Komponen di Alpine.js adalah elemen HTML yang diberi x-data. Setiap x-data memiliki state dan perilaku sendiri, yang bersifat terisolasi dari komponen lainnya, kecuali jika kita menghubungkannya secara eksplisit.
Contoh dasar:
<div x-data="{ pesan: 'Halo Dunia!' }">
<p x-text="pesan"></p>
</div>
Tantangan: Bagaimana Komponen Saling Berkomunikasi?
Karena x-data bersifat lokal, kita butuh mekanisme untuk saling berkomunikasi antar komponen. Beberapa cara yang bisa digunakan di Alpine.js:
- Custom Event dengan
$dispatchdan Event Listener - Store Global dengan
$store x-ref+$refs(dalam satu hirarki DOM)
1. Komunikasi dengan $dispatch
Kita bisa mengirim event dari satu komponen dan menangkapnya di komponen lain, terutama pada level parent.
Contoh: Komponen Anak Kirim Event ke Komponen Induk
<!-- Komponen Induk -->
<div x-data @notifikasi.window="alert($event.detail)">
<div x-data>
<button @click="$dispatch('notifikasi', 'Halo dari Komponen Anak!')">
Kirim Pesan
</button>
</div>
</div>
Keterangan:
.windowdigunakan agar event bisa didengarkan di level global$event.detailberisi data yang dikirim
2. Komunikasi dengan Store Global ($store)
Jika kita ingin menyimpan state global yang bisa diakses lintas komponen, kita bisa menggunakan fitur store.
-
Inisialisasi Store:
<script> document.addEventListener('alpine:init', () => { Alpine.store('auth', { login: false, toggle() { this.login = !this.login } }) }) </script> -
Komponen 1: Tombol Toggle
<div x-data> <button @click="$store.auth.toggle()">Login/Logout</button> </div> -
Komponen 2: Status Login
<div x-data> <p x-text="$store.auth.login ? 'Sedang Login' : 'Belum Login'"></p> </div>
3. Mengakses Elemen via $refs
Jika dua komponen berada dalam satu hirarki DOM, kita bisa menggunakan x-ref untuk mengakses elemen dari komponen anak.
<div x-data="{ fokusKeInput() { $refs.nama.focus() } }">
<input x-ref="nama" type="text" placeholder="Nama">
<button @click="fokusKeInput()">Fokus ke Input</button>
</div>
Kesimpulan
Di artikel ini, kita sudah belajar bagaimana cara melakukan interaksi antar komponen di Alpine.js. Kita bisa menggunakan:
$dispatchuntuk komunikasi berbasis event$storeuntuk state global yang dapat diakses lintas komponen$refsuntuk mengontrol elemen dalam satu komponen
Dengan memahami interaksi antar komponen, kita bisa membangun aplikasi web yang lebih modular dan scalable.
Di seri selanjutnya, kita akan belajar tentang Fetch API di Alpine.js, supaya aplikasi kita bisa mengambil data dari server secara real-time.
Terima Kasih
Artikel ini dibaca sebanyak 1.529 kali
{ setTimeout(() => { showShimmer = false; }, 300); })"
:class="{'opacity-0': !loaded, 'opacity-100': loaded}"
class="lazy w-full h-auto rounded-xl border border-white dark:border-neutral-700/80 transition-opacity duration-500"
loading="lazy"
/>
SAWERIA
Memuat komentar...