Dev to webs {Coding…}

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

บทที่ 10: การใช้ Template Literals


1. ความเข้าใจเกี่ยวกับ Template Literals

Template Literals เป็นฟีเจอร์ของ JavaScript ที่ช่วยให้เราสามารถสร้างข้อความ (String) แบบ Dynamic ได้ง่ายขึ้นโดยการใช้เครื่องหมาย backtick (`) แทนเครื่องหมายคำพูด (' หรือ ")

  • สามารถฝังตัวแปรหรือ Expressions ลงในข้อความได้โดยใช้ ${expression}
  • มีประโยชน์ในการเขียนโค้ดที่ต้องรวมข้อความกับตัวแปรหรือค่าที่คำนวณได้

ตัวอย่างพื้นฐาน:

const name = 'John';
const message = `Hello, ${name}!`;
console.log(message); // Output: Hello, John!


2. การใช้ Template Literals ใน x-text

ตัวอย่างพื้นฐาน:
<div x-data="{ name: 'John', age: 25 }">
    <h1 x-text="`Name: ${name}, Age: ${age}`"></h1>
</div>

คำอธิบาย:

  • x-text ใช้ Template Literals เพื่อสร้างข้อความ Dynamic
  • ข้อความที่แสดงใน <h1> คือ Name: John, Age: 25

3. การใช้ Template Literals ใน :class

ตัวอย่าง: การเปลี่ยนคลาสตามค่าจาก State
<div x-data="{ isActive: true }">
    <button :class="`btn ${isActive ? 'btn-active' : 'btn-inactive'}`">
        Toggle
    </button>
</div>

คำอธิบาย:

  • ถ้า isActive เป็น true, ปุ่มจะมีคลาส btn btn-active
  • ถ้า isActive เป็น false, ปุ่มจะมีคลาส btn btn-inactive

4. การใช้ Template Literals ใน :style

ตัวอย่าง: การปรับแต่งสไตล์แบบ Dynamic
<div x-data="{ color: 'red', fontSize: '16px' }">
    <p :style="`color: ${color}; font-size: ${fontSize}`">Dynamic Style</p>
    <button @click="color = 'blue'; fontSize = '20px'">Change Style</button>
</div>

คำอธิบาย:

  • ข้อความใน <p> จะเปลี่ยนสีและขนาดฟอนต์ตามค่าของ color และ fontSize
  • เมื่อคลิกปุ่ม สีจะเปลี่ยนเป็น blue และฟอนต์จะเปลี่ยนเป็น 20px

5. การประยุกต์ใช้ในสถานการณ์ต่าง ๆ

ตัวอย่าง: การสร้างลิงก์แบบ Dynamic
<div x-data="{ username: 'johndoe' }">
    <a :href="`https://example.com/user/${username}`" x-text="`Visit ${username}'s Profile`"></a>
</div>

คำอธิบาย:

  • ลิงก์ href จะถูกสร้างแบบ Dynamic เป็น https://example.com/user/johndoe
  • ข้อความที่แสดงใน <a> คือ Visit johndoe's Profile

6. การใช้ Template Literals กับ Array และ Object

ตัวอย่าง: วนลูปแสดงข้อความจาก Array
<div x-data="{ items: ['Apple', 'Banana', 'Cherry'] }">
    <ul>
        <li x-for="(item, index) in items" x-text="`${index + 1}: ${item}`"></li>
    </ul>
</div>

คำอธิบาย:

  • x-for ใช้ Template Literals เพื่อแสดงรายการแบบมีลำดับ
  • ข้อความที่แสดงใน <li>: 1: Apple 2: Banana 3: Cherry
ตัวอย่าง: แสดงค่าจาก Object
<div x-data="{ user: { name: 'John', age: 25 } }">
    <h1 x-text="`Name: ${user.name}, Age: ${user.age}`"></h1>
</div>

คำอธิบาย:

  • ข้อความที่แสดงใน <h1> คือ Name: John, Age: 25

7. ข้อดีของการใช้ Template Literals

  • โค้ดกระชับและอ่านง่าย: ลดการใช้เครื่องหมายบวก (+) ในการต่อข้อความ
  • รองรับค่าที่ซับซ้อน: ใช้ได้กับ Array, Object, หรือผลลัพธ์จาก Expression
  • Dynamic มากขึ้น: เหมาะกับการสร้างข้อความที่ต้องเปลี่ยนแปลงบ่อย

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

  • การประมวลผล: Template Literals ใน Alpine.js จะประมวลผลทุกครั้งที่ State เปลี่ยน อาจมีผลต่อประสิทธิภาพหากใช้มากเกินไป
  • ความปลอดภัย: หากค่ามาจากแหล่งภายนอก (เช่น API) ควรตรวจสอบและป้องกันการแทรกโค้ดที่ไม่ปลอดภัย (XSS)

สรุป

ในบทนี้ คุณได้เรียนรู้วิธีใช้ Template Literals ใน x-text, :class, และ :style เพื่อสร้างค่าที่ Dynamic และยืดหยุ่น ในบทถัดไป เราจะพูดถึงการแสดงและซ่อนองค์ประกอบแบบ Dynamic ด้วยคำสั่ง x-show!