บทที่ 4 ⏱ 15 นาที

ข้อมูลเปลี่ยนตลอด — Auto-refresh & Loading States

ตอนนี้แอปของคุณดึงข้อมูลจริงได้ แสดงผลดี และให้ผู้ใช้เลือกสิ่งที่อยากดูได้แล้ว

แต่ยังมีอีกสองอย่างที่ทำให้แอปดู “ยังไม่ใช่ของจริง” อยู่บ่อยมาก: หนึ่งคือข้อมูลอาจเก่าไปแล้ว สองคือเวลารอโหลด แอปไม่บอกอะไรเลย


ถ้าร้านเงียบไปเฉยๆ คนก็ไม่รู้ว่ากำลังทำอาหารอยู่หรือเปล่า

กลับมาที่ภาพร้านอาหารอีกครั้ง

ถ้าคุณสั่งอาหารไป แล้วพนักงานหายไปเงียบๆ โดยไม่พูดอะไรเลย คุณจะเริ่มไม่แน่ใจทันทีว่า ร้านได้รับออเดอร์หรือยัง ลืมหรือเปล่า หรือระบบค้างไปแล้ว

แอปก็เหมือนกัน

เวลามันกำลังไปถามข้อมูลจากภายนอก คนใช้ควรรู้ว่า กำลังโหลดอยู่ ไม่ใช่ปล่อยให้หน้าจอค้างนิ่งเหมือนไม่มีอะไรเกิดขึ้น

นี่คือ loading state (สถานะกำลังโหลด)

และอีกเรื่องคือ ถ้าข้อมูลเปลี่ยนได้เรื่อยๆ คนใช้ก็ควรมีทางกดดูข้อมูลล่าสุด หรือแอปควรรีเฟรชให้เป็นระยะอย่างเหมาะสม


แอปจริงไม่ได้มีแค่คำตอบ แต่ต้องมี “จังหวะระหว่างรอ” ด้วย

บทก่อนๆ เราโฟกัสที่สิ่งที่แอปแสดงเมื่อข้อมูลมาแล้ว

บทนี้เราจะใส่ใจช่วงระหว่างทางด้วย เพราะแอปจริงไม่ได้มีแต่ตอนที่ข้อมูลพร้อม มันมีช่วงที่กำลังรอ กำลังอัปเดต และกำลังเอาของใหม่มาเสิร์ฟด้วย

ถ้าแอปบอกจังหวะพวกนี้ดี คนใช้จะรู้สึกว่าแอปเชื่อถือได้มากขึ้นทันที

💡 แอปจริงควรตอบสนองตลอดเวลา

แม้ตอนข้อมูลยังไม่มา คนใช้ก็ควรรู้ว่าแอปกำลังทำอะไรอยู่ อย่างน้อยที่สุดคือบอกว่า “กำลังโหลด” หรือ “อัปเดตล่าสุดเมื่อ…”


สิ่งที่เราจะเพิ่มในบทนี้

แอปเช็คค่าเงินของคุณควรมี 3 อย่างนี้

  • loading state ที่เห็นชัดตอนกำลังดึงข้อมูล
  • ปุ่ม refresh สำหรับขอข้อมูลล่าสุดอีกครั้ง
  • เวลาอัปเดตล่าสุดที่อ่านง่าย

ถ้าต้องการอีกขั้น สามารถให้แอปรีเฟรชเองเป็นระยะได้ด้วย แต่หัวใจของบทนี้ไม่ใช่ความซับซ้อน หัวใจคือคนใช้ต้องไม่งงว่าตอนนี้ข้อมูลใหม่หรือเก่า และแอปกำลังทำอะไรอยู่


ลงมือทำ — เพิ่ม loading และ refresh

เปิดโปรเจกต์เดิมจากบทที่แล้ว แล้วส่ง prompt นี้

ปรับแอปเช็คอัตราแลกเปลี่ยนให้ดูเป็นแอปจริงมากขึ้น

- เพิ่ม loading state ที่เห็นชัดขณะกำลังดึงข้อมูลหรือกำลังอัปเดต
- เพิ่มข้อความหรือ spinner ที่บอกว่ากำลังโหลด
- เพิ่มปุ่ม refresh เพื่อให้ผู้ใช้กดอัปเดตข้อมูลล่าสุดได้เอง
- แสดงเวลาอัปเดตล่าสุดให้อ่านง่าย
- ถ้าเหมาะสม ให้รีเฟรชข้อมูลอัตโนมัติเป็นระยะ โดยไม่ทำให้หน้าจอดูวุ่นวาย
- รักษา layout และ design เดิมไว้

ไม่เปลี่ยนฟังก์ชันหรือ design ที่มีอยู่แล้ว

prompt นี้สื่อสารชัดว่าคุณไม่ได้ต้องการข้อมูลใหม่ชนิดใหม่

คุณต้องการ “พฤติกรรมของแอป” ที่ดีขึ้นตอนทำงานกับข้อมูลสด


ดูผลลัพธ์ — แล้วลองใช้งานแบบตั้งใจรอ

หลังจาก AI ปรับเสร็จ ลองใช้งานแบบนี้

  1. เปลี่ยนสกุลเงินหรือจำนวนเงิน 1 ครั้ง
  2. ดูว่ามีสถานะกำลังโหลดขึ้นมาหรือไม่
  3. รอจนข้อมูลใหม่แสดง
  4. กดปุ่ม refresh อีก 1 ครั้ง
  5. ดูว่าเวลาอัปเดตล่าสุดขยับหรือไม่

สิ่งที่คุณกำลังตรวจไม่ใช่แค่ “ข้อมูลมาไหม”

แต่คือ “ระหว่างที่ยังไม่มา แอปสื่อสารกับคนใช้อย่างไร”

ถ้าคนใช้รู้ว่าแอปกำลังทำงานอยู่ และรู้ว่าข้อมูลล่าสุดอัปเดตเมื่อไร แปลว่าแอปรอบนี้เริ่มมีมารยาทแบบแอปจริงแล้ว

ตอนนี้แอปไม่ปล่อยให้คนรอแบบงงๆ แล้ว

ถ้าคุณเห็น loading state, กด refresh ได้ และดูเวลาอัปเดตล่าสุดได้ แปลว่าแอปของคุณไม่ใช่แค่ดึงข้อมูลได้ แต่เริ่มดูน่าเชื่อถือขึ้นมากแล้ว


ถ้ายังดูค้างหรือไม่ชัดว่ากำลังโหลด ให้บอกเพิ่มแบบนี้

บางครั้ง AI อาจเพิ่มการโหลดจริง แต่คนใช้ยังมองไม่ออกว่ากำลังเกิดอะไรขึ้น

ถ้าเป็นแบบนั้น ลองส่งต่อแบบนี้

ตอนนี้แอปดึงข้อมูลได้ แต่ยังไม่ชัดตอนกำลังโหลด
ช่วยทำให้ loading state เห็นได้ชัดขึ้น
- แสดง spinner หรือข้อความกำลังโหลดในตำแหน่งที่ผู้ใช้เห็นได้ง่าย
- ระหว่างโหลด อย่าให้หน้าจอดูเหมือนค้าง
- หลังโหลดเสร็จ ให้กลับมาแสดงผลลัพธ์ตามปกติ
ไม่เปลี่ยนฟังก์ชันหรือ design ที่มีอยู่แล้ว
⚠️ อย่าทำ loading จนรบกวน

loading state ควรช่วยให้คนสบายใจ ไม่ใช่ดึงความสนใจเกินไป ถ้า spinner ใหญ่มาก กระพริบแรง หรือขึ้นทุกครั้งแบบน่ารำคาญ ก็ต้องปรับให้นุ่มลง


สำหรับแอปของคุณเอง

แนวคิดนี้ใช้ได้กับทุกแอปที่ดึงข้อมูลจาก API

  • แอปอากาศ: ตอนเปลี่ยนเมือง ควรมีสถานะกำลังโหลด
  • แอปค้นหาข้อมูล: ตอนกดค้นหา ควรมีสัญญาณว่าแอปกำลังไปหาคำตอบ
  • แอปวันหยุด: ตอนเปลี่ยนประเทศหรือปี ควรรีเฟรชข้อมูลใหม่อย่างชัดเจน
  • แอปข้อมูลเกม: ตอนเลือกตัวละครใหม่ ควรมีช่วงรอที่ไม่ทำให้หน้าจอดูพัง

คำถามสำคัญคือ:

ถ้าคนใช้กดบางอย่างแล้วต้องรอ แอปของคุณบอกเขาชัดพอหรือยังว่าตอนนี้กำลังเกิดอะไรขึ้น

💡 ข้อมูลสดต้องมีคำว่า 'ล่าสุด' เสมอ

ถ้าข้อมูลจากภายนอกเปลี่ยนได้ คนใช้มักอยากรู้ทันทีว่าอันที่กำลังเห็นอยู่นี่ใหม่แค่ไหน แค่มีคำว่า “อัปเดตล่าสุด” ก็ช่วยความรู้สึกเชื่อถือได้เยอะมาก


วันนี้คุณเพิ่มสิ่งที่คนมักไม่เห็น แต่ทุกคนรู้สึกได้

ผู้ใช้บางคนอาจไม่ได้พูดออกมาว่า loading state ดี หรือปุ่ม refresh มีประโยชน์

แต่พวกเขาจะรู้สึกได้ทันทีว่า แอปนี้ดูนิ่งกว่า น่าเชื่อถือกว่า และไม่ทำให้ต้องเดาเองตลอดเวลาว่าเกิดอะไรขึ้น

นี่คือหนึ่งในความต่างระหว่าง demo ที่พอใช้ได้ กับแอปที่เริ่มเหมือนของจริง


คุณเพิ่งทำอะไรสำเร็จไปแล้วบ้าง

  • คุณเข้าใจแล้วว่าข้อมูลสดต้องมีทั้ง “คำตอบ” และ “ช่วงระหว่างรอ”
  • คุณเพิ่ม loading state ที่บอกคนใช้ว่าแอปกำลังทำงานอยู่
  • คุณเพิ่ม refresh และเวลาอัปเดตล่าสุดเพื่อให้คนใช้รู้ว่าข้อมูลใหม่แค่ไหน
  • แอปของคุณเริ่มมีพฤติกรรมแบบแอปจริงที่คนใช้งานได้อย่างมั่นใจมากขึ้น

บทต่อไป เราจะพาแอปไปเจอสถานการณ์จริงอีกแบบที่ทุกแอปต้องเจอ: ตอนที่บริการภายนอกไม่ตอบ ช้า หรือพัง และแอปของคุณต้องไม่พังตามไปด้วย

🎉
ยินดีด้วย! คุณทำสำเร็จแล้ว

แอปของคุณเริ่มมีมารยาทแบบแอปจริงแล้ว — บอกได้ว่ากำลังโหลด และรีเฟรชข้อมูลใหม่ได้ 🎉