htmx 4.0

htmx 4.0 เป็นการยกเครื่องสถาปัตยกรรมภายในครั้งสำคัญ โดยเปลี่ยนแกนหลักจากการใช้ XMLHttpRequest (XHR) แบบเดิมมาเป็น Native fetch() API พร้อมปรับพฤติกรรมหลักเพื่อความเสถียรและความชัดเจนในการเขียนโค้ด

สรุปการเปลี่ยนแปลงหลักและ Breaking Changes ที่สำคัญ




การเปลี่ยนแปลงสถาปัตยกรรมหลัก (Major & Breaking Changes)

  • เปลี่ยนไส้ในเป็น Native fetch() API: เลิกใช้ XMLHttpRequest ทั้งหมด ทำให้ระบบรองรับ Stream และการจัดการ Request สมัยใหม่ได้อย่างเต็มประสิทธิภาพ
  • Explicit Attribute Inheritance (ต้องระบุการสืบทอดชัดเจน)
    • ปกติ htmx จะส่งต่อ attribute จาก element แม่ลงมายังลูกโดยอัตโนมัติ (Implicit)
    • ใน htmx 4.0 จะไม่ inherit โดยอัตโนมัติอีกต่อไป หากต้องการให้ส่งต่อไปยังลูก ต้องใส่ตัวขยาย :inherited เช่น

      Plain Text

      <!-- wp:syntaxhighlighter/code {"language":"bash"} -->
      <pre class="wp-block-syntaxhighlighter-code">npx [email protected] upgrade-check -- ./path/to/project
      
  • สามารถใช้ :append เพื่อต่อเติมค่าเดิมได้ หรือหากต้องการพฤติกรรมเดิมทั้งหมด สามารถเปิด htmx.config.implicitInheritance = true
  • Error Response Swapping ตามค่าเริ่มต้น
    • เดิม htmx จะไม่ swap เมื่อได้ HTTP Status 4xx หรือ 5xx
    • htmx 4.0 จะทำการ swap ทุก response ที่มี HTML body เข้ามา (ยกเว้นรหัส 204 No Content และ 304 Not Modified)
    • เพิ่ม attribute ใหม่ hx-status สำหรับแยกพฤติกรรมหรือ target ตาม HTTP Status Code ได้โดยตรง เช่น hx-status:422="target:#form-errors"
  • ยกเลิก History DOM Cache บน localStorage
    • การกดปุ่ม Back/Forward จะใช้วิธี re-fetch หน้าจาก Server เพื่อ swap ลง body หรือ [hx-history-elt] โดยตรง แทนการ snap DOM เก็บลง storage ซึ่งมักทำให้เกิดปัญหา state ค้าง
  • hx-delete ไม่ผูกข้อมูลฟอร์มอัตโนมัติ
    • ทำงานเหมือน hx-get แล้ว คือจะไม่แนบ input ใน form รอบๆ เข้าไปด้วย หากต้องการส่งค่าฟอร์มต้องระบุ hx-include="closest form" อย่างชัดเจน
  • ลำดับการ Swap ของ Out-of-Band (OOB)
    • สลับลำดับเป็น Main content swap ก่อน แล้วจึงตามด้วย OOB swap
  • Default Request Timeout
    • ตั้งค่า timeout เริ่มต้นไว้ที่ 60 วินาที (defaultTimeout = 60000) จากเดิมที่ไม่จำกัดเวลา



  • ฟีเจอร์ใหม่ (New Features & Extensions)

    • Built-in Morph Swapping: รวมอัลกอริทึม Idiomorph เข้ามาในตัวหลัก สามารถใช้สไตล์ innerMorph และ outerMorph ได้ทันทีโดยไม่ต้องโหลด extension เสริม
    • New Swap Styles: เพิ่มสไตล์ใหม่ เช่น textContent และ delete
    • ระบบ Extensions และ Streaming HTML:
      • ปรับวิธีโหลด extension ให้เรียบง่ายขึ้น ไม่ต้องใส่ hx-ext ใน HTML อีกต่อไป เพียง include ไฟล์ script เข้ามาก็พร้อมใช้งานทันที
      • Extension สำหรับ HTML Streaming ยุคใหม่ เช่น hx-sse (Server-Sent Events), hx-ws (WebSockets) และ hx-multipart (multipart/mixed)
      • Extensions เพิ่มเติมอย่าง hx-preload, hx-download (ดาวน์โหลดไฟล์ผ่าน fetch) และ hx-alpine-compat



    การเปลี่ยนชื่อและตัดสิ่งที่ไม่จำเป็นออก (Renames & Removals)

    • สลับชื่อ Attribute:
      • hx-disable เดิม ถูกเปลี่ยนชื่อเป็น hx-ignore
      • hx-disabled-elt เดิม ถูกเปลี่ยนชื่อเป็น hx-disable
    • Attribute ที่ถูกตัดออก: hx-ext, hx-inherit, hx-disinherit, hx-history, hx-vars (ใช้ hx-vals="js:..." แทน), hx-prompt (ย้ายไปเป็น extension)
    • ปรับมาตรฐานชื่อ Lifecycle Events:
      • ปรับโครงสร้างชื่อ Event เป็นแบบ htmx:phase:action เช่น htmx:configRequest เปลี่ยนเป็น htmx:config:request
      • ยุบ Error event ย่อยๆ (sendError, swapError, targetError, timeout) รวมเหลือเพียง htmx:error
      • ลบ Event เฉพาะของ XHR ออกทั้งหมด (เช่น htmx:xhr:progress)

    หากต้องการตรวจสอบว่าโค้ดเดิมมีจุดที่ต้องปรับแก้ตรงไหนบ้าง สามารถรันตัวสแกนของทีมงานได้โดยตรงผ่านคำสั่ง

    Plain Text

    npx [email protected] upgrade-check -- ./path/to/project
    

    Exit mobile version