Dev to webs {Coding…}

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

บทที่ 12: การใช้ x-if และข้อแตกต่างจาก x-show


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

x-if เป็นคำสั่งใน Alpine.js ที่ใช้สำหรับแสดงหรือซ่อน HTML Element โดยการเพิ่มหรือ ลบองค์ประกอบออกจาก DOM จริง ตามเงื่อนไขที่กำหนด

  • หากเงื่อนไขใน x-if เป็น true, Element จะถูกสร้างขึ้นและเพิ่มเข้าไปใน DOM
  • หากเงื่อนไขเป็น false, Element จะถูกลบออกจาก DOM

รูปแบบพื้นฐาน:

<template x-if="condition">
    <element>Content</element>
</template>

  • ใช้ x-if กับ <template> เพื่อหลีกเลี่ยงการแสดงผลที่ไม่จำเป็น

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

<div x-data="{ isVisible: true }">
    <button @click="isVisible = !isVisible">Toggle</button>
    <template x-if="isVisible">
        <p>This paragraph is conditionally rendered.</p>
    </template>
</div>

คำอธิบาย:

  • หาก isVisible เป็น true, <p> จะถูกสร้างใน DOM
  • หาก isVisible เป็น false, <p> จะถูกลบออกจาก DOM

3. การใช้ x-if ร่วมกับ JavaScript Expressions

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

คำอธิบาย:

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

4. การใช้ x-if กับข้อมูล Dynamic

คุณสามารถใช้ x-if กับข้อมูลแบบ Dynamic เช่น Array หรือ Object:

<div x-data="{ items: ['Apple', 'Banana', 'Cherry'] }">
    <template x-if="items.length > 0">
        <ul>
            <li x-for="item in items" x-text="item"></li>
        </ul>
    </template>
    <template x-if="items.length === 0">
        <p>No items available.</p>
    </template>
</div>

คำอธิบาย:

  • แสดง <ul> พร้อมรายการเมื่อ items มีข้อมูล
  • แสดง <p> ข้อความ “No items available.” เมื่อ items ว่าง

5. การเปรียบเทียบ x-if กับ x-show

คุณสมบัติx-ifx-show
การทำงานกับ DOMเพิ่ม/ลบองค์ประกอบออกจาก DOM จริงซ่อน/แสดงด้วย CSS (display: none)
เหมาะกับการใช้งานใช้เมื่อไม่ต้องการให้องค์ประกอบอยู่ใน DOMใช้เมื่อองค์ประกอบต้องคงอยู่ใน DOM
ผลกระทบต่อประสิทธิภาพเหมาะกับองค์ประกอบขนาดใหญ่หรือซับซ้อนดีกว่าสำหรับองค์ประกอบที่เปลี่ยนบ่อย
การใช้งานซ้อนกันต้องใช้ <template> เพื่อหลีกเลี่ยงข้อผิดพลาดสามารถใช้งานได้กับ Element ทั่วไป

6. ตัวอย่างเปรียบเทียบ x-if และ x-show

x-if:
<div x-data="{ isVisible: true }">
    <button @click="isVisible = !isVisible">Toggle</button>
    <template x-if="isVisible">
        <p>This is rendered only when visible.</p>
    </template>
</div>

x-show:
<div x-data="{ isVisible: true }">
    <button @click="isVisible = !isVisible">Toggle</button>
    <p x-show="isVisible">This is always in the DOM but hidden when not visible.</p>
</div>

ข้อสังเกต:

  • x-if จะสร้างและลบ <p> จาก DOM จริงเมื่อสลับค่า isVisible
  • x-show จะเปลี่ยนสถานะการแสดงผลของ <p> ด้วย CSS (display: none)

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

ตัวอย่าง: การแสดงสถานะการโหลด
<div x-data="{ isLoading: true }">
    <template x-if="isLoading">
        <p>Loading...</p>
    </template>
    <template x-if="!isLoading">
        <p>Content is loaded!</p>
    </template>
    <button @click="isLoading = !isLoading">Toggle Loading</button>
</div>

คำอธิบาย:

  • ข้อความ “Loading…” จะปรากฏเมื่อ isLoading เป็น true
  • ข้อความ “Content is loaded!” จะปรากฏเมื่อ isLoading เป็น false

8. ข้อควรระวังในการใช้ x-if

  1. การใช้งานที่ซับซ้อนเกินไป: การเพิ่ม/ลบองค์ประกอบจาก DOM บ่อยครั้งอาจส่งผลต่อประสิทธิภาพ
  2. การใช้งานกับ Event Listeners: เมื่อองค์ประกอบถูกลบออกจาก DOM, Event Listeners ที่ผูกไว้จะถูกลบด้วย

สรุป

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