บล็อกนี้จะเป็นเรื่องสั้นๆ ของ useMemo ซึ่งเป็นอีกหนึ่งฟังก์ชัน Hook ของ React ซึ่งเราจะเรียกใช้งาน useMemo นี้ได้ภายใน React Component เท่านั้น และวิธีการใช้งานเพื่อ ไม่ให้เกิดการกำหนดค่าหรือการเรียกใช้งานซ้ำซ้อน หากมีการ rerender ตัว component นั้นในรอบใหม่ ถือว่าเป็นการใช้งานเพื่อเพิ่มประสิทธิภาพของโปรแกรมได้เลยทีเดียว
const list = useMemo(() => {
return ["item-1", "item-2", "item-3", "item-1", "item-2", "item-3"];
}, []); จากรูปแบบของ useMemo จะมีพารามิเตอร์ 2 ตัว คือ
1. call back function เราสามารถเขียนการ return ค่า หรือ เรียกใช้ฟังก์ชันได้ใน call back function นี้ได้เลย
2. dependency การกำหนดให้ฟังก์ชัน useMemo นี้จะเรียกซ้ำอีกครั้งเมื่อ state ใน dependency มีการเปลี่ยนแปลง แต่ถ้าไม่ใส่อะไรเข้าไปเลย จะหมายถึงว่าให้ทำแค่ครั้งเดียว
จากที่อธิบายภาพรวมของ useMemo ไว้ข้างต้นแล้ว ต่อไปจะอธิบายแบบละเอียดด้วยการยกตัวอย่างโค้ดโปรแกรมที่คล้ายๆ กัน 2 แบบ แบบแรกจะไม่ใช้ useMemo และแบบที่สองจะใช้ useMemo
ซึ่งโค้ดตัวอย่างจะเขียนใน Compnent App โดยที่จะกำหนด
ตัวอย่าง การคำนวนการบวก ค่า a+a ของทั้งสองตัวอย่างจะมีการเรียกใช้ฟังก์ชันที่แตกต่างกัน คือ
เพื่อจะให้เห็นความแตกต่างของผลการเรียกและ render ค่าในฟังก์ชัน plus (เป็นฟังก์ชันคำนวนการบวกเลข 2 จำนวน) เราจะทำการปริ้นค่า b ซึ่งเป็น state ของ App ออกมาทาง console.log
จากตัวอย่างที่ 1 จะพบว่า ถ้าเราเปลี่ยนค่า a ไปเรื่อยๆ ผลลัพธ์บรรทัดด้านล่าง จะเปลี่ยนตาม และ ค่าใน console.log จะปริ้น —-0 ออกมาตลอด
และถ้าเราเพิ่มค่า b ไปเรื่อยๆ จะพบว่าผลลัพธ์บรรทัดด้านล่างจะไม่เปลี่ยน (ฟังก์ชันคำนวนด้วยค่า a+a) และค่าใน console.log จะปริ้น —-<b> ตามด้วยค่าของ b ออกมาตลอด
ซึ่งนั้นหมายความว่า ทุกครั้งที่ค่าของ state ของ App (ค่า a และ b) มีการเปลี่ยนแปลง ฟังก์ชัน plus จะถูกเรียกใช้เสมอ ไม่ว่าจะเป็นค่า b ที่เปลี่ยนซึ่งไม่เกี่ยวกับการคำนวนเลยก็ตาม
จึงทำให้เห็นว่า ฟังก์ชัน plus ควรที่จะทำงานหรือรันเฉพาะตอนที่ค่า state a เปลี่ยนเท่านั้น เราเลยนำ useMemo มาใช้ในตัวอย่างที่ 2
จากตัวอย่างที่ 2 ถ้าเราเปลี่ยนค่า a ไปเรื่อยๆ ผลลัพธ์จะเหมือนกันตัวอย่างที่ 1
แต่ถ้าเราเปลี่ยนค่า b จะเห็นว่า โปรแกรมจะไม่เข้าไปทำงานในฟังก์ชัน plus เลย เนื่องจาก เรากำหนดตัวแปรที่เรียกใช้ useMemo ขึ้นมาหนึ่งตัว (doubleX2) และไปเรียกใช้ฟังก์ชัน plus อีกรอบหนึ่งนั้นเอง ดังนั้นค่าของ doubleX2 จะถูกประมวลผลใหม่ก็ต่อเมื่อค่า a มีการเปลี่ยนแปลง (เรากำหนดไว้ใน dependency ของ useMemo)
useMemo จะเป็นฟังก์ชัน hook ที่ รีเทิร์นค่ากลับ และจะทำงานในฟังก์ชัน เฉพาะในกรณีที่ state ใน dependentcy มีการเปลี่ยนแปลงเท่านั้น (ค่า state ที่กำหนดในอาเรย์ [] พารามิเตอร์ตัวที่สองของ useMemo )
เราจะใช้ useMemo เพื่อเพิ่มประสิทธิภาพในการทำงานของ Component ไม่ให้เกิดการเรียกใช้ฟังก์ชัน หรือการคำนวนอะไรที่ซ้ำเดิม ได้คำตอบเดิมๆ ทุกครั้งที่ rerender ใหม่
ท้ายที่สุดแล้วมีหมายเหตุจากเว็บไซต์ React เขียนไว้ว่า ใน React เวอร์ชันใหม่ จะไม่ต้องใช้ useMemo แล้ว เพราะตัว React จะฉลาดขึ้นกว่านี้ ไม่ทำงานซ้ำที่ไม่จำเป็น และเป็นการเพิ่มประสิทธิภาพของโค้ดไปด้วยในตัว แต่ตอนนี้ก็ให้ใช้ useMemo ไปก่อน
Git is a versio…
React Hooks are…
https://www.tik…
https://www.tik…
This website uses cookies.