Svelte Actions Use Action Custom Directive Lifecycle
Definisi
Action adalah fungsi yang melekat ke elemen lewat use:namafungsi. Ia menerima node sebagai argumen dan boleh mengembalikan objek dengan lifecycle update dan destroy. Berguna untuk behavior reusable pada DOM (focus, click-outside, tooltip, drag).
Kapan dipakai
Pakai action saat logika beroperasi langsung pada elemen DOM dan ingin dipakai ulang lintas komponen, tanpa membungkus jadi komponen.
Cara kerja
Action sederhana
<script>
function autofocus(node) {
node.focus();
return {
destroy() { /* cleanup */ }
};
}
</script>
<input use:autofocus />Dengan parameter & update
function tooltip(node, text) {
node.title = text;
return {
update(newText) { node.title = newText; },
destroy() {}
};
}<button use:tooltip={'Simpan'}>Simpan</button>Click outside
function clickOutside(node, handler) {
const onClick = (e) => { if (!node.contains(e.target)) handler(); };
document.addEventListener('click', onClick, true);
return { destroy: () => document.removeEventListener('click', onClick, true) };
}Struktur alur
Loading diagram...
Catatan implementasi
- Action mengembalikan
{ update, destroy }opsional. updatejalan saat parameteruse:fn={x}berubah.- Selalu cleanup di
destroy(listener, observer) untuk hindari leak. - Bisa menerima parameter tunggal; untuk banyak, pakai object.
Kesalahan umum
- Lupa destroy: listener menumpuk tiap mount.
- Akses node sebelum ada: action sudah dapat node saat dipanggil, aman.
- Parameter berubah tapi no update: tambahkan
updatebila perlu reaksi. - Terlalu banyak action: pindahkan ke komponen bila logic rumit.