htmx ۴ اومد و کلی چیز رو شکست
خلاصهٔ کاملتر
تیم htmx تو راهنمای نسخهٔ ۴ فهرست تغییرات رو گذاشته و اولین چیزی که به چشم میخوره حجم تغییرات شکنندهست. همهٔ درخواستها از این به بعد با fetch() بومی مرورگر زده میشن و این یکی اصلاً قابل برگشت نیست. تایماوت پیشفرض هم که قبلاً 0 (یعنی بینهایت) بود، حالا 60000 میلیثانیهست.
بزرگترین تغییر روزمره، ارثبری صریحه. تو htmx ۲ یه attribute خودبهخود به بچهها ارث میرسید؛ تو نسخهٔ ۴ باید خودت :inherited رو بچسبونی:
<!-- htmx 2: implicit inheritance -->
<div hx-confirm="Are you sure?">
<button hx-delete="/item/1">Delete</button>
</div>
<!-- htmx 4: explicit inheritance -->
<div hx-confirm:inherited="Are you sure?">
<button hx-delete="/item/1">Delete</button>
</div>همین باعث شده hx-disinherit و hx-inherit کلاً حذف بشن. اگه حوصلهٔ این کار رو نداری، htmx.config.implicitInheritance = true رفتار قدیمی رو برمیگردونه.
چندتا تغییر دیگه هم هست که ساکت خرابکاری میکنن. حالا htmx همهٔ پاسخها رو سوآپ میکنه و فقط 204 و 304 استثنان؛ یعنی اگه سرورت با 422 یا 500 یه HTML برگردونه، همون میاد توی تارگت میشینه. ترتیب سوآپ out-of-band هم برعکس شده و اول محتوای اصلی سوآپ میشه. hx-delete دیگه مثل hx-get ورودیهای فرم دربرگیرنده رو نمیفرسته و باید hx-include="closest form" بذاری. تاریخچه هم دیگه تو localStorage کش نمیشه.
تو بخش تغییر نامها یه تله هست که راهنما تأکید میکنه اول از همه انجامش بدی: hx-disable قدیمی حالا اسمش hx-ignore هست، و اسم hx-disable رفته روی چیزی که قبلاً hx-disabled-elt بود. رویدادها هم به الگوی htmx:phase:action رسیدن (مثلاً htmx:afterSwap شده htmx:after:swap) و بیشتر رویدادهای خطا زیر htmx:error جمع شدن. hx-ext هم حذف شده و افزونهها رو مستقیم با تگ script لود میکنی.
در مقابل، چیزهای تازهای هم اومده: hx-action و hx-method برای progressive enhancement روی action/method بومی، hx-query برای فرستادن پارامترها تو بدنهٔ درخواست، hx-config برای تنظیمات هر المان، و hx-validate برای کنترل اعتبارسنجی فرم. سبکهای سوآپ هم innerMorph، outerMorph، textContent و delete اضافه شدن و با hx-status میشه برای هر کد وضعیت رفتار سوآپ جدا تعریف کرد.
نکات کلیدی:
- همهٔ درخواستها با fetch() میرن و برگشت به XMLHttpRequest ممکن نیست
- ارثبری فقط با پسوند :inherited کار میکنه؛ hx-disinherit و hx-inherit حذف شدن
- پاسخهای 4xx و 5xx هم سوآپ میشن؛ فقط 204 و 304 سوآپ نمیشن
- hx-disable قدیمی شده hx-ignore، و hx-disabled-elt شده hx-disable
- defaultTimeout از 0 به 60000 و defaultSettleDelay از 20 به 1 تغییر کرده
- hx-ext حذف شده؛ افزونهها با تگ script مستقیم لود میشن




