Takip et

Vue.js’te Bileşen Slotlarını Kullanma Kılavuzu

Vue. js’te Bileşen Slotlarını Kullanma Kılavuzu Vue.

Vue.js’te Bileşen Slotlarını Kullanma Kılavuzu

Vue.js, modern ve reaktif kullanıcı arayüzleri oluşturmak için popüler bir JavaScript çerçevesidir. Bileşen tabanlı mimarisi, kodun yeniden kullanılabilirliğini ve bakımını kolaylaştırırken, bazen bileşenlerimizin içeriğini daha dinamik ve esnek bir şekilde yönetme ihtiyacı doğar. İşte tam bu noktada Vue.js’in “slot” (yuva) özelliği devreye girer. Slotlar, bir bileşenin içeriğini, o bileşeni kullanan üst bileşen (parent component) tarafından özelleştirilebilmesine olanak tanır. Bu makalede, Vue.js’teki bileşen slotlarının ne olduğunu, neden kullanıldığını ve farklı türlerini (temel, adlandırılmış, kapsamlı) ayrıntılı örneklerle ele alacağız.

Slotlar Nedir ve Neden İhtiyaç Duyarız?

Vue.js’te her bileşen, belirli bir işlevselliği ve görünümü kapsayan bağımsız bir birimdir. Örneğin, bir Button bileşeni, bir Card bileşeni veya bir Modal bileşeni oluşturabilirsiniz. Ancak bazen, bir bileşenin genel yapısını korurken, içindeki bazı kısımların dışarıdan belirlenmesini isteyebiliriz.

Diyelim ki bir Card bileşeniniz var. Bu kartın her zaman bir başlığı ve bir gövdesi olmasını istiyorsunuz, ancak gövde içeriğinin veya başlığın tam olarak ne olacağı, kartı kullandığınız yere göre değişebilir. Eğer bu içeriği props (özellikler) aracılığıyla geçirmeye çalışırsanız, kısa metinler için sorun olmayabilir, ancak daha karmaşık HTML yapıları veya birden fazla farklı içerik bloğu için props kullanmak hantal ve yönetilemez hale gelebilir.

İşte bu noktada slotlar devreye girer. Slotlar, bir bileşen içinde “boşluklar” veya “yer tutucular” tanımlamanıza olanak tanır. Bu boşluklar, bileşeni kullanan üst bileşen tarafından doldurulur. Bu, bileşenlerinizi daha esnek, yeniden kullanılabilir ve özelleştirilebilir hale getirir. Bir bileşeni bir ev olarak düşünürseniz, slotlar o evin pencereleri, kapıları veya farklı odaları gibidir; evin genel yapısı sabittir, ancak bu boşlukları istediğiniz gibi doldurabilirsiniz.

Slotlar, bileşenlerin sorumluluklarını ayırmanın (separation of concerns) harika bir yoludur:
* Child Component (Çocuk Bileşen): Bileşenin genel yapısını, düzenini ve stilini tanımlar. İçerik için yer tutucuları () sağlar.
* Parent Component (Üst Bileşen): Çocuk bileşeni kullanır ve slot yer tutucularına hangi içeriğin yerleştirileceğini belirler.

Bu sayede, aynı Card bileşenini farklı içeriklerle birçok farklı yerde kullanabilir, ancak her bir kartın görünümünü ve davranışını merkezi olarak Card bileşeninde yönetebilirsiniz.

Temel Slotlar (Varsayılan Slotlar)

Temel slotlar, bir bileşenin tek bir ana içerik bloğunu üst bileşenden alması gereken durumlarda kullanılır. Bunlara “varsayılan slotlar” veya “isimsiz slotlar” da denir çünkü belirli bir isimleri yoktur.

Kullanım Şekli

1. Çocuk Bileşende (ChildComponent.vue):
Bir etiketi ekleyerek, bu etiketin yerine üst bileşenden gelecek içeriğin yerleştirileceğini belirtirsiniz.




2. Üst Bileşende (ParentComponent.vue):
Çocuk bileşeni kullanırken, bileşen etiketlerinin arasına yerleştirdiğiniz her şey, çocuk bileşendeki etiketinin yerine otomatik olarak render edilir.




Yukarıdaki örnekte, MyCard bileşeni aynı yapıyı korurken, App.vue içinde farklı içeriklerle iki kez kullanılmıştır.

Varsayılan İçerik

Bir slota içerik sağlanmadığında gösterilecek bir varsayılan içerik tanımlayabilirsiniz. Bu, etiketinin içine yerleştirilen herhangi bir HTML veya metin olabilir.


Şimdi MyCard bileşenini hiçbir içerik sağlamadan kullanırsanız:


İlk MyCard bileşeni “Bu kart için herhangi bir içerik sağlanmadı.” metnini gösterecekken, ikincisi kendi

etiketindeki içeriği gösterecektir.

Adlandırılmış Slotlar (Named Slots)

Bir bileşenin birden fazla farklı içerik bloğunu alması gerektiğinde adlandırılmış slotlar kullanılır. Örneğin, bir Layout bileşeni bir başlık, bir ana içerik ve bir alt bilgi slotuna sahip olabilir.

Kullanım Şekli

1. Çocuk Bileşende (ChildComponent.vue):
etiketine bir name özelliği eklersiniz. Varsayılan slot için özel bir name belirtmeye gerek yoktur, ancak isterseniz name="default" kullanabilirsiniz.




Bu LayoutComponent‘te üç slot var: header adında bir slot, footer adında bir slot ve isimsiz (varsayılan) bir slot.

2. Üst Bileşende (ParentComponent.vue):
Üst bileşende,