Menggunakan Slot pada Vue: Penggunaan yang lebih Spesifik dengan v-slot

Menggunakan Slot pada Vue: Penggunaan yang lebih Spesifik dengan v-slot

Pada dasarnya, slot adalah fitur penting pada Vue yang memungkinkan kita untuk menambahkan konten yang ditentukan oleh parent component ke dalam child component. Namun, slot juga dapat digunakan untuk penggunaan yang lebih spesifik melalui sintaks v-slot.

Penggunaan v-slot

Sintaks v-slot memungkinkan kita untuk menentukan fungsi slot yang akan dipanggil pada child component. Fungsi ini dapat menerima properti sebagai argumen, sehingga kita dapat mengirimkan data ke dalam child component melalui slot.

Contohnya, berikut adalah contoh penggunaan v-slot:

function MyComponent(slots) {
 const greetingMessage = 'hello'
 return `<div>${
 // call the slot function with props!
 slots.default({ text: greetingMessage, count: 1 })
 }</div>`
}

<MyComponent v-slot="{ text, count }">
 {{ text }} {{ count }}
</MyComponent>

Dalam contoh di atas, kita menggunakan v-slot untuk menentukan fungsi slot yang akan dipanggil pada child component. Fungsi ini menerima properti text dan count sebagai argumen.

Slot dengan Nama

Selain penggunaan default, Vue juga memungkinkan kita untuk menggunakan slot dengan nama. Namun, kita harus menggunakan sintaks v-slot:name="slotProps" untuk mengirimkan properti ke dalam child component melalui slot.

Contohnya, berikut adalah contoh penggunaan slot dengan nama:

<template>
 <MyComponent>
 <template #header="headerProps">
 {{ headerProps }}
 </template>

 <template #default="defaultProps">
 {{ defaultProps }}
 </template>

 <template #footer="footerProps">
 {{ footerProps }}
 </template>
 </MyComponent>
</template>

Dalam contoh di atas, kita menggunakan v-slot untuk menentukan fungsi slot yang akan dipanggil pada child component. Fungsi ini menerima properti headerProps, defaultProps, dan footerProps sebagai argumen.

Mengirimkan Properti ke dalam Slot

Untuk mengirimkan properti ke dalam slot, kita dapat menggunakan sintaks v-slot:name="slotProps" dan menentukan fungsi slot yang akan dipanggil pada child component. Contohnya:

<slot name="header" message="hello"></slot>

Dalam contoh di atas, kita mengirimkan properti message ke dalam slot dengan nama header.

Penggunaan Slot pada Component Reusable

Slot juga dapat digunakan pada component reusable untuk menampilkan konten yang ditentukan oleh parent component. Contohnya, berikut adalah contoh penggunaan slot pada component reusable:

<!-- <FancyList> template -->
<div>
 <slot :message="hello"></slot>
 <slot name="footer" />
</div>

<!-- This template won't compile -->
<MyComponent v-slot="{ message }">
 <p>{{ message }}</p>
 <template #footer>
 <!-- message belongs to the default slot, and is not available here -->
 <p>{{ message }}</p>
 </template>
</MyComponent>

Dalam contoh di atas, kita menggunakan v-slot untuk menentukan fungsi slot yang akan dipanggil pada child component. Fungsi ini menerima properti message sebagai argumen.

Contoh Penggunaan Slot pada Component Reusable

Contohnya, berikut adalah contoh penggunaan slot pada component reusable:

<!-- <FancyList> template -->
<ul>
 <li v-for="item in items">
 <slot name="item" v-bind="item"></slot>
 </li>
</ul>

Dalam contoh di atas, kita menggunakan v-slot untuk menentukan fungsi slot yang akan dipanggil pada child component. Fungsi ini menerima properti item sebagai argumen.

Renderless Components

Penggunaan slot juga dapat digunakan untuk membuat komponen renderless yang hanya mengandung logika dan tidak menampilkan apa pun kecuali melalui penggunaan slot. Contohnya:

<!-- <MouseTracker> template -->
<MouseTracker v-slot="{ x, y }">
 Mouse is at: {{ x }}, {{ y }}
</MouseTracker>

Dalam contoh di atas, kita menggunakan v-slot untuk menentukan fungsi slot yang akan dipanggil pada child component. Fungsi ini menerima properti x dan y sebagai argumen.

Itulah artikel tentang penggunaan slot pada Vue, termasuk penggunaan v-slot, slot dengan nama, mengirimkan properti ke dalam slot, dan penggunaan slot pada component reusable. Dengan menggunakan slot, kita dapat membuat aplikasi yang lebih dinamis dan fleksibel.