Web Bileşenleri ile Modern Web'i İnşa Etmek: Gerçek Dünyadan İpuçları
Haz 26, 2026
web-development web-components javascript frontend-development custom-elements shadow-dom
# Web Components: Gerçek Dünyada Çalışan Modern Web Bileşenleri
Web geliştiriciler arasında şöyle bir espri dolaşır: birkaç yılda bir biri "yeni" bir bileşen sistemi icat eder, herkes heyecanlanır, sonra hayal kırıklığına uğrar, sonra yine heyecanlanır. Ama web component'leri bir moda değil tarayıcının encapsulation, yeniden kullanım ve birlikte çalışabilirlik konusundaki doğal çözümü. Ve 2019'da benimsediğin o JavaScript framework'ünden farklı olarak (evet, sen) web component'leri, günün modası geçmiş framework GitHub tarihinde kaybolduktan çok sonra bile çalışmaya devam edecek.
Gelelim üretim ortamında gerçekten işe yarayan web component'leri nasıl inşa edeceğimize.
## Custom Element'lerin Anatomisi
Özünde custom element'ler sadece `HTMLElement`'i extend eden JavaScript class'ları. Bu kadar. Sihir, component'in ne zaman uyandığını, konuştuğunu ve yok olduğunu kontrol etmenizi sağlayan lifecycle hook'larında gizli.
```javascript
class Butonum extends HTMLElement {
constructor() {
super();
// Component'inizi burada başlatın
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
// DOM'a eklendiğinde
this.render();
}
disconnectedCallback() {
// Temizlik zamanı
}
attributeChangedCallback(name, oldValue, newValue) {
// Attribute değişikliklerine tepki ver
}
}
```
`connectedCallback` component'inizin "merhaba dünya" anı — DOM'unuzu kurduğunuz, event listener'ları eklediğiniz ve component'inizi hayata geçirdiğiniz yer. `disconnectedCallback` de bir o kadar önemli: listener'ları kaldırdığınız, bellek sızıntılarını önlediğiniz temizlik zamanı.
## Shadow DOM: Component'inizin Kişisel Dünyası
İşler burada ilginçleşiyor. Shadow DOM component'inizin içinde encapsulated bir DOM ağacı oluşturur, dış dünyadan görünmez. İçinde tanımlanan stiller dışarı sızmaz; dış stiller de (açıkça izin vermediğiniz sürece) içeri sızmaz.
Component'inizin kendi küçük evreninde yaşadığını düşünün.
```javascript
class ZenginKart extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
this.shadowRoot.innerHTML = `
`;
}
}
```
`:host` selector'ı component'inizin kök elementi — wrapper'ın kendisini stillendirmek, display modlarını halletmek veya component seviyesindeki attribute'lara tepki vermek için kullanın.
## Slot'lar: Dünyalar Arası Köprüler
Slot'lar shadow DOM'unuzla dış dünya arasındaki köprü. Named slot'lar sayesinde içeriği component'in içindeki belirli yerlere yönlendirebilirsiniz:
```html
Kartımın Başlığı
```
```javascript
// Component'inizin içinde
const slot = this.shadowRoot.querySelector('slot[name="baslik"]');
slot.addEventListener('slotchange', () => {
const assignedNodes = slot.assignedNodes();
// Slot'a gelen içerik değiştiğinde tepki ver
});
```
Slot'lar encapsulation'dan ödün vermeden component'leri esnek hale getirir — web geliştirmede nadir görülen kazan-kazan durumu.
## Etkili Component Tasarım Kalıpları
### Girdiler ve Çıktılar
Component'leriniz dış dünyayla net bir arayüz üzerinden iletişim kurar:
- **Attribute'lar**: HTML üzerinden yapılandırma (``)
- **Property'ler**: Programatik yapılandırma (`element.tema = 'karanlik'`)
- **Event'ler**: Çıktı iletişimi (`element.addEventListener('degisim', handler)`)
- **Metotlar**: Doğrudan API çağrıları (`element.sifirla()`)
Bu kalıbı tüm component'lerinizde tutarlı tutun. Gelecekteki siz (ve ekip arkadaşlarınız) size teşekkür edecek.
### CSS Custom Properties: Baş Ağrısız Tema Yönetimi
Renkleri ve boşlukları hardcode etmek yerine, temalandırma için CSS değişkenlerini benimseyin:
```css
:host {
--buton-arkaplan: #007bff;
--buton-yazi: white;
--buton-dolgu: 0.75rem 1.5rem;
--buton-yuvarlak: 4px;
}
button {
background: var(--buton-arkaplan);
color: var(--buton-yazi);
padding: var(--buton-dolgu);
border-radius: var(--buton-yuvarlak);
}
```
Artık kullanıcılar tek satır CSS ile component'inizi temalandırabilir:
```css
butonum {
--buton-arkaplan: #28a745;
}
```
## Ne Zaman Kullanılır (ve Kullanılmaz)
Web component'leri şu durumlarda parlar:
- **Tasarım sistemleri**: Her yerde çalışan tutarlı UI kütüphaneleri oluşturma
- **Cross-framework projeler**: React, Vue ve vanilla JS arasında bileşen paylaşımı
- **Uzun ömürlü projeler**: Framework yeniden yazımı gerektirmeyecek yapılar inşa etme
Ama her zaman cevap değil:
- **Yoğun state barındıran arayüzler**: Karmaşık state yönetimi için React ekosisteminin hâlâ avantajları var
- **Basit statik içerik**: Etkileşimsiz yeniden kullanılabilir bir `` muhtemelen aşırı kaçmıştır
## Kalıcı Component'ler İnşa Etmek
Web components spesifikasyonu önemli ölçüde olgunlaştı. Tarayıcı desteği mükemmel ve Lit (Google ekibinden) gibi araçlar, hâlâ standartlara uygun custom element'ler çıkartırken geliştirici deneyimini çok daha tatlı hale getiriyor.
Anahtar içgörü? Web component'leri React veya Vue ile rekabet etmiyor — tamamlayıcılar. Gerçek cross-framework yapı taşları için web component'leri kullanın, karmaşık uygulama mantığı için favori framework'ünüze uzanın.
Web platformu, ona verdiğimiz kredinin çok daha fazlasına muktedir. Bir UI problemini çözmek için bir bağımlılığa uzanmadan önce kendinize sorun: tarayıcı bunu zaten yapabilir miydi?
Bundle boyutunuz (ve gelecekteki maintainer'lar) size minnettar kalabilir.
---
*Sonraki web projenizi deploy etmeye hazır mısınız? NameOcean'un Vibe Hosting'i, geliştirme workflow'nıza uyum sağlayan AI destekli araçlarla modern web uygulamaları için mükemmel bir temel sunuyor.*
Bu içerik varsayılan slot'a gider.