@lit/reactive-element هسته اصلی خانواده Lit هست. وب کامپوننت یعنی یه تگ HTML سفارشی که خودت تعریفش می کنی، مثلاً کارت محصول یا دکمه ثبت نظر، و هر جای صفحه مثل یه تگ معمولی می تونی ازش استفاده کنی. این بسته یه کلاس پایه بهت می ده که ساخت این تگ ها رو راحت و تمیز می کنه، بدون اینکه یه فریم ورک کامل وارد پروژه بشه.
کار اصلی این کلاس مدیریت وضعیت کامپوننته. تو مشخص می کنی کدوم خاصیت ها واکنشی باشن و هر وقت یکی از اونها عوض شد، کامپوننت خودش یه به روزرسانی رو زمان بندی می کنه. تغییرهای پشت سر هم هم جمع می شن و یه بار اعمال می شن، پس نگران رندر اضافه نیستی. هماهنگی بین attribute و property، چرخه عمر، استایل با css و Shadow DOM هم با همین کلاس کار می کنن. برای جدا کردن منطق قابل استفاده مجدد، مفهوم reactive controller رو داره و دکوریتورها هم جداگانه در دسترسن.
یه نکته مهم موقع انتخاب: این بسته قالب نویسی و رندر HTML رو خودش انجام نمی ده. اگه می خوای با قالب های تگ دار (template) و اتصال داده راحت کار کنی، سراغ خود Lit برو. اون روی همین کلاس ساخته شده و رندر رو هم اضافه می کنه. @lit/reactive-element وقتی به درد می خوره که کنترل کامل می خوای، حجم نهایی باید خیلی کم بمونه، یا می خوای موتور رندر خودت رو بذاری. اگه فقط یه اسلایدر یا منوی ساده روی قالب وردپرس می خوای، این انتخاب سنگینیه و یه افزونه آماده بهتره.
یه نکته برای سایت های فارسی: استایل های سراسری صفحه داخل Shadow DOM نمی رسن، ولی ویژگی های ارثی مثل direction و font-family از بیرون رد می شن. پس اگه فونت و راست به چپ بودن رو روی صفحه درست تنظیم کرده باشی، معمولاً داخل کامپوننت هم درست دیده می شن. بقیه استایل ها رو باید خودت داخل کامپوننت بنویسی.
یه مشکل عملی هم برای سایت های ایرانی هست: وقتی اینترنت بین الملل مشکل داره، لود کردن کتابخانه از CDN های خارجی ممکنه کار نکنه. بهتره فایل رو روی هاست خودت بذاری. نسخه های رسمی و بدون تغییر این بسته توی مخزن داخلی ما هم هست و می تونی از همین جا برداری.
راهنمای استفاده
این بسته یه ماژول ES هست. پس یا باید کدش رو با type=module توی صفحه لود کنی، یا با یه باندلر مثل Vite یا esbuild توی فایل خودت بسته بندی کنی. ساده ترین مسیر برای شروع اینه:
- فایل کتابخانه رو از همین صفحه دانلود کن و روی هاست خودت آپلود کن، مثلاً کنار فایل های JS قالب یا پروژه.
- کد آماده پایین همین صفحه رو توی صفحه بذار. اون کد فایل رو به شکل ماژول فراخوانی می کنه.
- یه کلاس بساز که از ReactiveElement ارث ببره و خاصیت های واکنشی رو توش تعریف کن.
- با customElements.define اسم تگ رو ثبت کن. اسم تگ حتماً باید یه خط تیره داشته باشه.
- متد update رو بازنویسی کن و اول super.update رو صدا بزن. بعدش محتوای کامپوننت رو همون جا بساز. می تونی از بقیه متدهای چرخه عمر هم استفاده کنی.
- تگ جدیدت رو توی HTML صفحه یا قالب وردپرس بنویس و attributeها رو بهش بده.
توی وردپرس فایل رو با wp_enqueue_script اضافه کن و حتماً type=module رو بهش بده، مثلاً با فیلتر script_loader_tag. اگه نسخه وردپرست API مخصوص ماژول های جاوااسکریپت رو داره، می تونی از اون استفاده کنی. حواست باشه افزونه های بهینه ساز کش و مینیفای فایل رو خراب نکنن. بعد از هر تغییر کش رو پاک کن و توی کنسول مرورگر ببین خطای import نداری.