إزاي تستخدم Web Components ببساطة وذكاء
يوليو 6, 2025إزاي تستخدم Web Components ببساطة وذكاء
كتير من المطورين بيفكروا إن Web Components معمولة عشان تبقى بديل كامل لفريموركات زي React أو Vue. بس الحقيقة إنك ممكن تستخدمها بطريقة أسهل بكتير، وتركز على تعزيز (Enhance) صفحات HTML عادية بتطلع من السيرفر من غير أي تعقيد.
المشكلة: بنعقد نفسنا زيادة عن اللزوم
بعض المطورين بيبدأوا يستخدموا Web Components وبيفترضوا إنهم محتاجين يعملوا Shadow DOM، ويضيفوا أدوات Routing، وإدارة State، كأنهم بيبنوا SPA كاملة.
بس ده مش الهدف الأساسي من Web Components. هي أداة بسيطة تقدر تستخدمها عشان تضيف تفاعلات صغيرة على الـ HTML اللي السيرفر جايبه لك.
الحل: استخدم Web Components للتحسين التدريجي
يعني ببساطة، إنت بتعرض صفحة HTML عادية فيها عناصر متاحة لكل المستخدمين، وبعدين تضيف فوقها شوية سلوك تفاعلي من خلال JavaScript.
مثال عملي: كارت تسعير
تخيل عندك الكود ده:
<pricing-card>
<price-option class="monthly hidden">99 جنيه / شهر</price-option>
<price-option class="yearly">999 جنيه / سنة</price-option>
</pricing-card>
المستخدم يشوف السعر السنوي بشكل افتراضي. لما يغير نوع الاشتراك (مثلاً من خلال زرار)، Web Component هيبدّل بين السعرين:
class PricingCard extends HTMLElement {
connectedCallback() {
this.addEventListener('change', () => {
this.querySelector('.monthly').classList.toggle('hidden');
this.querySelector('.yearly').classList.toggle('hidden');
});
}
}
customElements.define('pricing-card', PricingCard);
ليه الطريقة دي قوية؟
- HTML شغال كويس من غير جافاسكريبت
- الكومبوننت بيتفاعل مع الصفحة من غير أي إطار عمل
- أداء عالي وسريع في التحميل
- كودك بيشتغل على كل المتصفحات الحديثة بدون تعديلات
مثال تاني: إضافة عناصر لقائمة
عايز تخلي المستخدم يضيف عناصر جديدة في القائمة؟ تقدر تستخدم template:
<dynamic-list>
<ul></ul>
<button>أضف عنصر</button>
<template>
<li>عنصر جديد</li>
</template>
</dynamic-list>
وجافاسكريبت بسيط زي ده:
class DynamicList extends HTMLElement {
connectedCallback() {
this.template = this.querySelector('template');
this.list = this.querySelector('ul');
this.querySelector('button').addEventListener('click', () => {
const item = this.template.content.cloneNode(true);
this.list.appendChild(item);
});
}
}
customElements.define('dynamic-list', DynamicList);
طرق تمرير البيانات داخل الكومبوننت
- عن طريق خصائص زي
data-user-id، وتقرأها بـthis.dataset.userId - عن طريق الأحداث (Custom Events)
- عن طريق دوال عامة في الكلاس تتنادي من بره
أمثلة من الواقع
- استخدام Web Component لعرض Chart.js بتتحدث تلقائي لما البيانات تتغير
- دمج بوابة دفع Stripe جوا عنصر مخصص بيتحمل بعد ما السكريبت الرئيسي يوصل
- مشاركة الحالة بين أكتر من عنصر باستخدام Nanostores مع Web Components
الخلاصة
Web Components مش لازم تكون بديل كامل للفريموركات. استخدمهم بحكمة، خليك بسيط، وخليهم أدوات لتحسين تجربة المستخدم من غير ما تعقّد الكود أو تستهلك البراوزر.
المدونة
يونيو 17, 2025
تحديث Laravel 12.18.0 صدر نسخه Laravel 12.18.0 فيها شوية ميزات جامدة كده: توابع لتشفير وفك تشفير النصوص باستخدام Stringable ديركت في chain strings...
يوليو 06, 2025
إزاي تستخدم Web Components ببساطة وذكاء كتير من المطورين بيفكروا إن Web Components معمولة عشان تبقى بديل كامل لفريموركات زي React أو Vue. بس الحقيق...
يوليو 01, 2025
حلل كود Laravel باستخدام Laravel Introspect لو بتعمل Refactor كبير أو بتبني أدوات Dev، Laravel Introspect بيسمحلك تستعلم عن الكود: فيوز، مودلز، رو...
أغسطس 17, 2025
Laravel Global Scopes: Automatic Query Filtering Eloquent الأهمية: فرض فلترة ثابتة على جميع استعلامات الموديل (مثل Soft Deletes) دون تكرا...
يوليو 01, 2025
مكونات واجهة المستخدم والتفاعل الأساسية في React Native React Native بتوفرلك مجموعة قوية من المكونات الجاهزة اللي تقدر تستخدمها لبناء تطبيقات موباي...
يونيو 03, 2025
لارافيل 12.16.0 - مميزات جديدة للمطورين 1. قاعدات تحقق جديدة: in_array_keys دلوقتي تقدر تتحقق إن الأراي فيه على الأقل مفتاح واحد من اللي انت محددهم...