ทำ Custom hooks ใช้งานร่วมกับ onSnapshot (Cloud Firestore)
เนื่องจากในโปรเจคที่ผมมีส่วนร่วม มีการใช้งาน React กับ Cloud firestore และต้องการแสดงผลแบบ Realtime นั้นต้องอาศัยฟังก์ชัน onSnapshot() ในการรับข้อมูลแบบทันที
ตัว onSnapshot นั้นสามารถบอกลักษณะของ Change ที่เกิดขึ้นได้ว่าเป็นการเปลี่ยนแปลงข้อมูลชนิดใด
การนำมาใช้ร่วมกับ React Hooks จะต้องทำเป็น Custom hooks ขึ้นมาโดยใช้ useState เป็นตัวไว้คอยเก็บค่า isLoading ไว้ใช้กับ loader , data ใช้เก็บข้อมูลที่มากจาก firestore และ error ส่วน useEffect นำมาใช้คล้ายๆกับ lifecycle hook componentDidmount() เมื่อเรียกใช้ onSnapshot จะเป็นการ subscribe รอการ callback อยู่ตลอดเวลา
เมื่อเราอยากจะ unsubscribe ก็สามารถทำได้โดย สร้างตัวแปร unsub มาเก็บฟังก์ชัน onSnapshot ของเราตรงบรรทัดที่ 15 จากนั้น ไปเรียกใช้ใน clean up ฟังก์ชันของ useEffect
*** ผมลองใช้วิธีนี้แต่ไม่ทราบเหมือนกันว่าทำไมมันไม่ unsubscribe ให้ ถ้าเพื่อนๆมีวิธีที่ดีกว่าแนะนำกันมาได้นะครับ
- *****หลังจากที่ได้เขียนบทความนี้ ผมก็เจอ lib firebase react hook จากทาง CSFrequency ทำขึ้นมา หากสนใจก็ลองใช้ดูนะครับ
- https://github.com/CSFrequency/react-firebase-hooks/tree/master/firestore#usedocumentdata