Dev to webs {Coding…}

เรียนรู้การพัฒนาซอฟเวอร์ เพื่อความรู้ที่ยั่งยืน

บทที่ 11: การแสดง/ซ่อนด้วย x-show


1. ความเข้าใจเกี่ยวกับ x-show

x-show เป็นคำสั่งใน Alpine.js ที่ใช้สำหรับการแสดงหรือซ่อน HTML Element บนหน้าเว็บโดยอ้างอิงจากเงื่อนไขใน State

  • x-show="condition":
    • หาก condition เป็น true, Element จะปรากฏ
    • หาก condition เป็น false, Element จะถูกซ่อนด้วยการตั้งค่า CSS display: none;

2. ตัวอย่างพื้นฐานการใช้งาน

<div x-data="{ isVisible: true }">
    <button @click="isVisible = !isVisible">Toggle</button>
    <p x-show="isVisible">This is a toggled paragraph.</p>
</div>

คำอธิบาย:

  • isVisible เป็น State ที่ควบคุมการแสดงผลของ <p>
  • เมื่อคลิกปุ่ม ค่า isVisible จะสลับระหว่าง true และ false
  • หาก isVisible เป็น true, <p> จะปรากฏ
  • หาก isVisible เป็น false, <p> จะถูกซ่อน

3. การใช้ x-show กับ JavaScript Expressions

คุณสามารถใช้ JavaScript Expressions ใน x-show ได้ เช่น:

<div x-data="{ count: 0 }">
    <button @click="count++">Increase Count</button>
    <p x-show="count > 5">Count is greater than 5!</p>
</div>

คำอธิบาย:

  • <p> จะปรากฏเฉพาะเมื่อค่า count มากกว่า 5

4. การเพิ่ม Transition ใน x-show

Alpine.js รองรับการเพิ่มเอฟเฟกต์ Transition เมื่อแสดงหรือซ่อน Element

ตัวอย่าง:
<div x-data="{ isVisible: false }">
    <button @click="isVisible = !isVisible">Toggle</button>
    <div x-show="isVisible" 
         x-transition 
         style="background: lightblue; padding: 10px;">
        This box appears with a transition!
    </div>
</div>

คำอธิบาย:

  • เพิ่มคำสั่ง x-transition เพื่อทำให้การแสดง/ซ่อน Element มีเอฟเฟกต์ เช่น การจางหาย (fade-in/fade-out)

5. การใช้ x-show กับหลายเงื่อนไข

<div x-data="{ showA: true, showB: false }">
    <button @click="showA = !showA">Toggle A</button>
    <button @click="showB = !showB">Toggle B</button>

    <p x-show="showA">This is Element A.</p>
    <p x-show="showB">This is Element B.</p>
</div>

คำอธิบาย:

  • Element A และ B จะแสดง/ซ่อนตามเงื่อนไขที่กำหนดแยกกัน

6. ความแตกต่างระหว่าง x-show และ x-if

  • x-show: ซ่อน Element โดยใช้ CSS (display: none;)
  • x-if: เพิ่มหรือลบ Element ออกจาก DOM จริง
ตัวอย่างเปรียบเทียบ:
<div x-data="{ isVisible: true }">
    <!-- ใช้ x-show -->
    <p x-show="isVisible">This is using x-show.</p>

    <!-- ใช้ x-if -->
    <template x-if="isVisible">
        <p>This is using x-if.</p>
    </template>
</div>

ข้อควรพิจารณา:

  • x-show เหมาะกับการซ่อน/แสดง Element ที่ต้องการให้ยังอยู่ใน DOM
  • x-if เหมาะกับ Element ที่ไม่ต้องการให้มีอยู่ใน DOM เมื่อไม่แสดง

7. การประยุกต์ใช้ x-show

ตัวอย่าง: สร้าง Modal
<div x-data="{ isModalOpen: false }">
    <button @click="isModalOpen = true">Open Modal</button>
    
    <div x-show="isModalOpen" 
         x-transition 
         style="background: rgba(0,0,0,0.5); position: fixed; top: 0; left: 0; right: 0; bottom: 0;">
        <div style="background: white; margin: 50px auto; padding: 20px; max-width: 300px;">
            <p>This is a Modal!</p>
            <button @click="isModalOpen = false">Close</button>
        </div>
    </div>
</div>

คำอธิบาย:

  • Modal จะแสดงเมื่อค่า isModalOpen เป็น true
  • ใช้ x-transition เพื่อเพิ่มเอฟเฟกต์การแสดง/ซ่อน

8. ข้อควรระวัง

  • หากมี Element จำนวนมากที่ใช้ x-show ควรตรวจสอบว่าความซับซ้อนของ DOM ไม่ส่งผลต่อประสิทธิภาพ
  • x-show ไม่ลบ Element ออกจาก DOM แต่จะเปลี่ยนค่า CSS เป็น display: none

สรุป

ในบทนี้ คุณได้เรียนรู้วิธีใช้ x-show เพื่อแสดงหรือซ่อน Element ตามเงื่อนไข พร้อมตัวอย่างการใช้งานที่ครอบคลุม เช่น การใช้ Transition และการเปรียบเทียบกับ x-if ในบทถัดไป เราจะเจาะลึกการจัดการเงื่อนไขและลูปด้วย x-if และ x-for!