เมื่อใดควรใช้ useMemo และ useCallback: คำแนะนำสั้น ๆ สำหรับแฟน React
เผยแพร่แล้ว: 2022-07-30หากคุณเป็นนักพัฒนา React คุณอาจเคยพบการสนทนาเกี่ยวกับ React useMemo กับ useCallback ทางออนไลน์และจบลงด้วยความสับสนมากกว่าที่เคยเป็นมา การหาความแตกต่างระหว่าง useMemo และ useCallback อาจเป็นเรื่องยากมาก ไม่เป็นไร! การเริ่มต้นใช้งาน React-Hooks อาจเป็นเรื่องยาก แต่ก็มีประโยชน์อย่างมากในตอนเริ่มต้น
ในบทความนี้ เราจะแสดงให้คุณเห็นถึงความแตกต่างระหว่าง useCallback และ useMemo และเมื่อใดควรใช้ useCallback และ useMemo
สารบัญ
ความแตกต่างระหว่าง useMemo และ useCallback
มีการแนะนำตะขอในตัวสองตัวด้วย React 16.8 คุณลักษณะเหล่านี้ถูกนำมาใช้เพื่อเพิ่มประสิทธิภาพการทำงาน ความแตกต่างระหว่าง useMemo กับ useCallback ดูเหมือนจะเล็กน้อย ดังนั้นเราจะพยายามขจัดความสับสน
React-Hooks คืออะไร?
Hooks เป็นคุณสมบัติใหม่ที่นำมาใช้ใน React ที่อนุญาตให้ useState และคุณสมบัติ React อื่น ๆ โดยไม่ต้องเขียนคลาส Hooks คือวิธีการและฟังก์ชันที่ “เชื่อมต่อ” เข้ากับสถานะและคุณสมบัติวงจรชีวิตของ React
useCallback เทียบกับ useMemo
useCallback hook จะใช้เมื่อใดก็ตามที่องค์ประกอบย่อยแสดงผลซ้ำแล้วซ้ำอีกโดยไม่จำเป็นจริงๆ เมื่อคุณใช้ useCallback คุณสามารถป้องกันการแสดงซ้ำที่ไม่จำเป็นนี้ได้โดยส่งคืนอินสแตนซ์เดิมของฟังก์ชันนั้นที่ส่งผ่านแทนที่จะสร้างอินสแตนซ์ใหม่ทุกครั้ง ซึ่งจะช่วยประหยัดเวลาได้มาก (และเงินที่ใช้ไปกับชั่วโมงพัฒนา) การส่งผ่านอาร์เรย์ของการพึ่งพาที่มีการเรียกกลับที่บันทึกจะส่งผลให้เวอร์ชันที่บันทึกจะมีการเปลี่ยนแปลงเมื่อการขึ้นต่อกันเปลี่ยนแปลงเท่านั้น
useMemo ใช้ในองค์ประกอบการทำงานของ React ใช้เพื่อคืนค่าที่บันทึกไว้ Memoization หมายถึงกระบวนการประหยัดเวลาในการคอมไพล์ใหม่โดยส่งคืนผลลัพธ์ที่แคชไว้ แทนที่จะคอมไพล์ฟังก์ชันใหม่ด้วยอาร์กิวเมนต์เดียวกันอีกครั้งสำหรับการรันครั้งถัดไป ผลลัพธ์ที่แคชจะถูกส่งคืนในครั้งต่อไปที่มีการเรียก useMemo hooks ให้ค่าที่แมปหน่วยความจำ
เห็นได้ชัดว่ามีความคล้ายคลึงกันบางอย่าง ทั้งใน useMemo และ useCallback hook ยอมรับฟังก์ชันเช่นเดียวกับอาร์เรย์ของการพึ่งพา อย่างไรก็ตาม useCallback จะจดจำค่าที่ส่งคืน และ useMemo จะจดจำฟังก์ชัน กล่าวอีกนัยหนึ่งคือแคชประเภทค่าและอีกรายการหนึ่งแคชฟังก์ชัน
- อ่านเพิ่มเติม – อย่างไรและทำไมคุณจึงควรจัดระเบียบไฟล์ของคุณ
- 9 วิธียอดนิยมในการใช้อุปกรณ์อิเล็กทรอนิกส์ในห้องเรียน
เมื่อใดควรใช้ useCallback กับ useMemo
ดังนั้นเมื่อใดที่คุณควรใช้ useCallback และเมื่อใด useMemo เป็นตัวเลือกที่ดีที่สุด มาดูตัวอย่างกัน หากโค้ดที่มีน้ำหนักมากและมีราคาแพงในการคำนวณยอมรับอาร์กิวเมนต์และส่งกลับค่า useMemo เป็นตัวเลือกที่ดีที่สุด ด้วยวิธีนี้ คุณสามารถอ้างอิงค่าระหว่างการเรนเดอร์ได้โดยไม่ต้องรันโค้ดซ้ำ และทำให้เสียเวลาและกำลังในการคำนวณของคุณ
หากคุณต้องการรักษาอินสแตนซ์ของฟังก์ชันให้คงอยู่ในการเรนเดอร์หลายๆ รายการ คุณควรใช้ useCallback แทนเพราะโดยพื้นฐานแล้วจะวางฟังก์ชันไว้นอกขอบเขตของส่วนประกอบ React ของคุณเพื่อให้ไม่เสียหาย
useEffect คืออะไร?
เราได้กล่าวถึงอาร์เรย์การพึ่งพาซึ่งคุณอาจเคยพบเมื่อใช้ useEffect useEffect เป็นอีกหนึ่ง React hook ใช้เพื่อจัดการกับผลข้างเคียงในส่วนประกอบที่ทำงานโดยใช้ตรรกะอาร์กิวเมนต์การเรียกกลับ การพึ่งพาอาศัยกันคือรายการการพึ่งพาของผลข้างเคียง เช่น อุปกรณ์ประกอบฉากหรือค่าสถานะ
hook นี้แสดง React ว่าส่วนประกอบต้องดำเนินการหลังจากเรนเดอร์ เมื่อ DOM ได้รับการอัปเดต เอฟเฟกต์ที่คุณส่งจะถูกเก็บไว้ คุณยังสามารถทำการดึงข้อมูลเพื่อให้ได้ผลลัพธ์นี้
กล่าวโดยย่อ useCallback, useMemo และ useEffect ล้วนเกี่ยวข้องกับการเพิ่มประสิทธิภาพระหว่างการแสดงส่วนประกอบซ้ำในแอปพลิเคชัน React
สิ่งสำคัญคืออย่าใช้ตะขอมากเกินไป hooks นำเสนอตรรกะใหม่และซับซ้อน และอาจมีผลตรงกันข้ามมากกว่าที่คุณตั้งใจ ทำให้เกิดปัญหาด้านประสิทธิภาพแทนที่จะแก้ปัญหาเหล่านั้น useMemo ควรใช้สำหรับการคำนวณที่มีราคาแพงมากเท่านั้น
อย่าใช้ useMemo หรือ useCallback เพื่อแก้ไขปัญหาพื้นฐานเกี่ยวกับแอปพลิเคชันของคุณ ในที่สุด ปัญหาเหล่านี้จะปรากฎขึ้นอีกและหลอกหลอนคุณ ดังนั้นควรจัดการกับข้อบกพร่องที่ทราบก่อน
- อ่านเพิ่มเติม – วิธีเลือก CMS ที่ดีที่สุด
- ข้อดีและข้อเสียของวิธีการเข้ารหัสคืออะไร?
บทสรุป
หวังว่าบทความนี้จะมีประโยชน์ และคุณเข้าใจสองตะขอมากขึ้น สรุป:
- ทั้งยอมรับฟังก์ชันและอาร์เรย์ของการพึ่งพา
- useMemo จดจำค่าที่ส่งคืน useCallback จดจำฟังก์ชัน
ความแตกต่างระหว่าง useMemo และ useCallback นั้นค่อนข้างชัดเจน! เครื่องมือเหล่านี้มีศักยภาพในการประหยัดเวลาและเงิน แต่ถ้าใช้ในบริบทและสภาพแวดล้อมที่เหมาะสมเท่านั้น
ฉันหวังว่าบทช่วยสอนนี้จะช่วยให้คุณทราบเกี่ยวกับ เมื่อต้องใช้ useMemo และ useCallback: a Brief Guide For React Fans หากคุณต้องการพูดอะไรแจ้งให้เราทราบผ่านส่วนความคิดเห็น หากคุณชอบบทความนี้ โปรดแชร์และติดตาม WhatVwant บน Facebook, Twitter และ YouTube สำหรับคำแนะนำทางเทคนิคเพิ่มเติม
เมื่อใดควรใช้ useMemo และ useCallback – คำถามที่พบบ่อย
useCallback และ useMemo แตกต่างกันอย่างไร
UseCallsback ใช้เพื่อปรับพฤติกรรมการเรนเดอร์ของส่วนประกอบฟังก์ชัน React ของคุณให้เหมาะสม ในขณะที่ useMemo ใช้เพื่อจดจำฟังก์ชันราคาแพงเพื่อหลีกเลี่ยงการต้องเรียกพวกมันในทุกการเรนเดอร์
ควรใช้ callback เมื่อใด
ตะขอ useCallback จะใช้เมื่อคุณมีส่วนประกอบที่ลูกกำลังแสดงผลซ้ำแล้วซ้ำเล่าโดยไม่จำเป็น
เหตุใดเราจึงใช้ useMemo
useMemo เป็นหนึ่งใน hooks ที่ React นำเสนอ เบ็ดนี้ช่วยให้นักพัฒนาแคชค่าของตัวแปรพร้อมกับรายการการพึ่งพา
useMemo ทริกเกอร์การเรนเดอร์ใหม่หรือไม่
ใช่ มันเป็นไปได้ทั้งหมด useMemo ทำอะไรหลังจากเกิดการแสดงผลซ้ำ มันจะเปรียบเทียบค่าในอาเรย์การขึ้นต่อกัน หากไม่เปลี่ยนแปลง ค่าที่คำนวณล่าสุดจะถูกส่งคืน มิฉะนั้นจะคำนวณใหม่
ฉันจะใช้ useEffect และ useCallback ได้อย่างไร
วิธีเดียวที่โค้ด useEffect สามารถทำได้คือเปลี่ยนสถานะเพื่อให้แสดงผลซ้ำหรือแก้ไข DOM โดยตรง
useMemo ตื้นหรือไม่?
บันทึกช่วยจำใช้การเปรียบเทียบแบบตื้นของส่วนประกอบอุปกรณ์ประกอบฉาก และเนื่องจากวิธีการทำงานของ JavaScript การเปรียบเทียบวัตถุแบบตื้นจะคืนค่าเท็จแม้ว่าจะมีค่าเหมือนกันก็ตาม