Real Loyihalarda Web Components
Iyn 26, 2026
web-development web-components javascript frontend-development custom-elements shadow-dom
# Web Components Haqiqiy Hayotda: Zamonaviy Veb Uchun Qurish
Veb dasturchilar orasida bir latifa bor: har bir necha yilda bir marta kimdir "yangilik" ixtiro qiladi, biz hamma qiziqamiz, keyin charchaymiz, qayta qiziqamiz. Lekin Web Components bu trend emas — bu brauzerning o'zi taklif qiladigan echimi. Siz 2019-yilda qo'llagan JavaScript freymvorkingizdan farqli o'laroq (ismini yaxshi bilasiz), Web Components o'sha freymvork eskirib ketganidan keyin ham ishlaydi.
Keling, ishlab chiqarishda haqiqatan ham ishlaydigan Web Components qurishni ko'rib chiqamiz.
## Custom Element Tuzilishi
Custom elementlar aslida `HTMLElement` dan voris olgan JavaScript klasslaridir. Xolos. Bulardagi "sehr" — bu lifecycle hooklar. Ular sizga component qachon "uyg'onga", "gapira", va "yo'q bo'la" boshlashini boshqarish imkonini beradi.
```javascript
class MeningTugmam extends HTMLElement {
constructor() {
super();
// Componentni shu yerda boshlaysiz
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
// DOMga qo'shildi
this.render();
}
disconnectedCallback() {
// Tozalash vaqti
}
attributeChangedCallback(name, oldValue, newValue) {
// Attribute o'zgarishlariga javob
}
}
```
`connectedCallback` — bu componentingizning "Salom dunyo" daqiqasi. Bu yerda DOM sozlayapsiz, event listenerlar biriktiryapsiz, componentingizni jonlantiryapsiz. `disconnectedCallback` ham shunchalik muhim: bu yerda tozalaysiz, listenerlarni olib tashlaysiz, xotira sizib chiqishini oldini olasiz.
## Shadow DOM: Componentingizning Shaxsiy Holyasi
Bu yerda ishlar qiziqarli bo'la boshlaydi. Shadow DOM sizning component ichida ajratilgan DOM daraxti yaratadi. Tashqi dunyo uni ko'rmaydi ham. Ichkarida yozilgan stillar tashqariga chiqmaydi; tashqi stillar ichkariga kirmaydi (agar siz aniq ruxsat bermasangiz).
Uni shunday tasavvur qiling — componentingiz o'zining kichik dunyosida yashayapti.
```javascript
class ChiroyliKarta extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
this.shadowRoot.innerHTML = `
`;
}
}
```
`:host` selektori — bu sizning componentingizning ildiz elementi. Undan wrapperni stillash, display rejimlarini boshqarish, yoki component darajasidagi attributelarni kuzatish uchun foydalanasiz.
## Slotlar: Dunyolar O'rtasidagi Ko'priklar
Slotlar — bu sizning shadow DOM va tashqi dunyo o'rtasidagi bog'liq. Nomli slotlar yordamida aniq kontentni aniq joyga joylashtirasiz:
```html
Mening Karta Sarlavham
```
```javascript
// Component ichida
const slot = this.shadowRoot.querySelector('slot[name="sarlavha"]');
slot.addEventListener('slotchange', () => {
const assignedNodes = slot.assignedNodes();
// Slotdagi kontent o'zgarganda javob ber
});
```
Slotlar encapsulationni qurbon qilmasdan componentlarni moslashuvchan qiladi. Veb dasturlashda kam uchraydigan g'alaba-g'alaba holat.
## Samarali Component Dizayn Namunalari
### Kirish va Chiqishlar
Componentlaringiz tashqi dunyo bilan aniq interfeys orqali muloqot qiladi:
- **Attributelar**: HTML orqali sozlab chiqish (``)
- **Propertylar**: Dasturda sozlab chiqish (`element.mavzu = 'qorong'i'`)
- **Eventlar**: Chiqish aloqasi (`element.addEventListener('ozgarish', ishlovchi)`)
- **Metodlar**: To'g'ridan-to'g'ri API chaqiruvlar (`element.reset()`)
Bu patternni barcha componentlaringizda bir xil qiling. Kelajakdagi o'zingiz (va jamoadoshlaringiz) minnatdor bo'ladi.
### CSS Custom Properties: Theming Azobsiz
Ranglar va bo'shliqlarni qattiq kodlamasdan, CSS o'zgaruvchilarini theming uchun qo'llang:
```css
:host {
--tugma-bg: #007bff;
--tugma-text: white;
--tugma-padding: 0.75rem 1.5rem;
--tugma-radius: 4px;
}
button {
background: var(--tugma-bg);
color: var(--tugma-text);
padding: var(--tugma-padding);
border-radius: var(--tugma-radius);
}
```
Endi foydalanuvchilar bitta CSS qatori bilan componentni themelashlari mumkin:
```css
mening-tugmam {
--tugma-bg: #28a745;
}
```
## Qachon Qo'llash (Va Qo'llamaslik) Kerak
Web Components yaxshi ishlaydi:
- **Design systemlar**: Hamma joyda ishlaydigan barqaror UI kutubxonalari yaratish
- **Turli freymvorkli loyihalar**: React, Vue va vanilla JS o'rtasida component almashish
- **Uzoq umrli loyihalar**: Freymvorkni qayta yozishni talab qilmaydigan narsalar qurish
Lekin har doim javob bermaydi:
- **Murakkab holatli interfeyslar**: React ekotizimi murakkab state boshqaruvi uchun hali afzalliklarga ega
- **Oddiy statik kontent**: Interaktivliksiz qayta foydalanish mumkin bo'lgan `` — bu ortiqcha bo'lishi mumkin
## Uzoq umrli Componentlar Qurish
Web Components spetsifikatsiyasi sezilarli darajada rivojlangan. Brauzer qo'llab-quvvatlashi a'lo darajada, va Lit (Google jamoasidan) kabi asboblar ishlab chiquvchi tajribasini yaxshilaydi, hali ham standartlarga mos custom elementlarni chiqaradi.
Asosiy tushuncha? Web Components React yoki Vue bilan raqobatlashmaydi — ular bir-birini to'ldiradi. Haqiqatan ham freymvorklar o'rtasida ishlaydigan building blocklar uchun Web Componentsni qo'llang, murakkab dastur mantig'i uchun o'zingiz yoqtirgan freymvorkingizni oling.
Veb platformasi biz ko'pincha tan olgandek ko'proq qobilyatga ega. Keyingi marta UI muammosini hal qilish uchun bog'liqlik o'rnatmoqchi bo'lganingizda, o'zingizdan so'rang: brauzer buni allaqachon qila oladimi?
Sizning bundle hajmingiz (va kelajakdagi qo'llab-quvvatlovchilar) sizga minnatdor bo'lishi mumkin.
Bu kontent default slotga tushadi.