Fetch Data ใน React.js ทำยังไงบ้าง?
เราสามารถ fetch data ใน React.js ได้ท่าไหนบ้าง? มีทั้งการ fetch โดยไม่ต้องใช้ library อะไร และการใช้ library ที่ช่วยจัดการเรื่อง loading, caching หรือการ revalidating ต่างๆ ให้เรา การ fetch data มีท่าไหนบ้าง ไปดูกันครับ
ตัวอย่างจะใช้ API_URL
คือ
1. การใช้ useEffect และ fetch/axios
วิธีที่ง่ายที่สุด คือการ fetch ใน useEffect()
เมื่อได้ข้อมูล response แล้ว ก็ทำการอัพเดท state เพื่อทำการ re-render component ใหม่
นอกจากนี้ เราอาจจะเพิ่ม state สำหรับ isLoading หรือ error กรณีที่ fetch data แล้วมีปัญหา เช่น อาจจะย้ายไปเป็น custom hooks ก็ได้เช่น
2. ใช้ SWR
ตัว SWR เป็น React Hooks for Data fetching สร้างโดยทีมเดียวกับที่ทำ Next.js ข้อดีคือใช้งานง่าย มี caching / reuse ได้ ผมเคยเขียนตัวอย่าง SWR ไว้แล้ว สามารถอ่านรายละเอียดเพิ่มเติมได้
[React.js] ใช้ SWR เพื่อดึงข้อมูล API
อย่างแรก คือ สร้าง fetcher เป็น function ที่รับ args เป็น key และ return response data กลับไป
ส่วนการ fetch ก็ง่ายๆ แบบนี้เลย
ข้อดีของ SWR คือ การ revadating หรือการคอย cached และ sync ข้อมูล api ให้เหมือนมัน realtime นั่นเอง ซึ่งถ้าเราใช้ useEffect()
และ fetch ปกติเราต้องจัดการ handle ตรงนี้เอง
3. การใช้ React Query
ตัวอย่างนี้จะเป็นการใช้งาน React Query ครับ การใช้ React Query คือ เราต้องกำหนด Provider โดยใช้ client เป็น queryClient
การใช้งาน Query จะใช้ได้เฉพาะที่อยู่ภายใน <QueryClientProvider>
ตัวอย่างการ query คือต้องกำหนด
queryKey
เป็น key ที่เราต้องการqueryFn
เป็น function ที่เราจะใช้ในการ fetch ข้อมูล
ตัวอย่างการ fetch data ด้วย React Query เต็มๆ ก็จะเป็นแบบนี้
สรุป
บทความนี้ก็เป็นตัวอย่างคร่าวๆ ในการ Fetch Data ในรูปแบบต่างๆ จะเห็นว่า แบบง่ายสุดคือ useEffect()
และแบบที่ใช้ทั้ง SWR หรือ React Query ทั้งสอง ก็คือเหมือนเป็นตัวช่วย อำนวยความสะดวก มี caching / revalidating หรือการจัดการ state loading, error ต่างๆ ให้เรา เพราะการ fetch เบื้องหลังยังไงก็ต้องใช้ fetch หรือ axios
Source Code ในบทความนี้
References
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust