ตอบสนอง useEffect() Hook: การใช้งาน อย่างไร และเมื่อใดควรใช้
เผยแพร่แล้ว: 2023-05-25สารบัญ
รู้เบื้องต้นเกี่ยวกับ useEffect() Hook
useeffect ขอ องค์ประกอบสำคัญโดยจะจัดการงานต่างๆ เช่น การดึงข้อมูล การตั้งค่าตัวรับเหตุการณ์ หรือการแก้ไข DOM และอนุญาตให้ผู้ใช้ดำเนินการผลข้างเคียงโดยใช้องค์ประกอบการทำงาน นอกจากนี้ยังควบคุมวงจรชีวิตของส่วนประกอบ
ตะขอ useeffect ใช้ ประโยชน์จากสองอาร์กิวเมนต์ ฟังก์ชัน และอาร์เรย์การขึ้นต่อกันที่เป็นทางเลือกฟังก์ชันที่ส่งผ่านเป็นอาร์กิวเมนต์แรกจะถูกดำเนินการหลังการเรนเดอร์เริ่มต้นของคอมโพเนนต์ และจากนั้นอีกครั้งหลังจากการอัปเดตทุกครั้ง คุณสามารถระบุตัวแปรที่เอฟเฟ็กต์ขึ้นอยู่กับการใช้อาร์เรย์การขึ้นต่อกัน การเรียกใช้เอฟเฟกต์ใหม่จะดำเนินการหากตัวแปรใด ๆ ของอาร์เรย์การพึ่งพาเปลี่ยนแปลง
โดยเนื้อแท้แล้วuseeffect hook ถูกสร้างขึ้นเพื่อรับมือกับความท้าทายที่เผชิญภายใต้วงจรชีวิตของส่วนประกอบคลาส ES6อย่างไรก็ตาม ตอนนี้ได้กลายเป็นหนึ่งในแนวคิดปฏิกิริยาหลัก
ด้วยบทสรุปนี้เกี่ยวกับสิ่งที่ useeffect ใน react มาดูที่ไวยากรณ์ของมันกัน
ไวยากรณ์พื้นฐานของ useEffect() Hook
useEffect รองรับ สองอาร์กิวเมนต์ ; อาร์กิวเมนต์ที่สองเป็นทางเลือก ไวยากรณ์เป็นดังนี้:
useEffect(<ฟังก์ชัน>, <การพึ่งพา>)
ฟังก์ชันประกอบด้วยตรรกะผลข้างเคียง มันกระตุ้นการดำเนินการของการโทรกลับโดยตรงหลังจากการอัพเดต DOM
การพึ่งพาประกอบด้วยอาร์เรย์ที่เป็นทางเลือกของการพึ่งพาผลข้างเคียงของคุณ เช่น ค่าสถานะและค่าอุปกรณ์ประกอบฉาก โปรดสังเกตว่าuse effect hook เรียกใช้การโทรกลับเฉพาะเมื่อการอ้างอิงมีการเปลี่ยนแปลงระหว่างการเรนเดอร์
ไวยากรณ์มีจุดประสงค์เดียวของ useEffect() ช่วยให้คุณวางตรรกะผลข้างเคียงของคุณไว้ในฟังก์ชันการเรียกกลับ จากนั้นใช้อาร์กิวเมนต์การพึ่งพาเพื่อควบคุมเมื่อคุณต้องการให้ผลข้างเคียงทำงาน
คุณสามารถพิจารณาไวยากรณ์ต่อไปนี้เมื่อใช้งาน useEffect() Hook:
// นำเข้า useEffect
นำเข้า { useEffect } จาก 'ตอบสนอง';
ฟังก์ชัน MyComponent () {
// เรียกมันเหนือ JSX ที่ส่งคืน
// ส่งผ่านอาร์กิวเมนต์ 2 อาร์กิวเมนต์ไปยังอาร์เรย์และฟังก์ชัน
useEffect(() => {
// ฟังก์ชั่นเอฟเฟกต์
กลับ () => {
// ฟังก์ชั่นการล้างข้อมูล
};
}, [/* อาร์เรย์ขึ้นต่อกัน */]);
// ตรรกะการเรนเดอร์ส่วนประกอบ
}
}
ตรวจสอบหลักสูตรเทคโนโลยีฟรีของเรา เพื่อรับความได้เปรียบเหนือการแข่งขัน
การติดตั้งและถอดส่วนประกอบด้วย useEffect() Hook
ติดตั้ง
ขั้นตอนเริ่มต้นของวงจรชีวิตของส่วนประกอบ React เกี่ยวข้องกับการสร้างและการแทรกส่วนประกอบลงใน DOM ขั้นตอนวงจรอายุของ react useeffect รวมถึงเมธอดวงจรชีวิตของ componentDidMount ซึ่งดำเนินการเมื่อติดตั้งคอมโพเนนต์
นี่คือตัวอย่างการติดตั้งส่วนประกอบโดยใช้ useEffect() hook
ComponentDidMount() {
console.log("ติดตั้งคอมโพเนนต์เรียบร้อยแล้ว");
this.setState({
โหลด: จริง
})
}
ในตัวอย่างข้างต้น componentDidMount ให้คุณใช้ setState ดังนั้น คุณสามารถตั้งค่าและเปลี่ยนสถานะในวิธีวงจรชีวิตได้อย่างง่ายดาย วิธีการที่เกี่ยวข้องใช้การเรียก API เรียกปลายทางระยะไกล และดึงข้อมูล
กำลังยกเลิกการต่อเชื่อม
วิธีวงจร ชีวิต useeffect ปฏิกิริยา นี้ จัดการการล้างข้อมูลใน DOMมันเหมือนกับฟังก์ชั่นการล้าง useeffect ที่ลบส่วนประกอบออกจาก DOMเรียกว่า unmounting ใน React การเลิกต่อเชื่อมใช้วิธีวงจรชีวิตวิธีเดียว นั่นคือ componentWillUnmount เรียกว่าเมื่อคุณต้องการลบส่วนประกอบออกจาก DOM
ComponentWillUnmount() {
console.log(“ยกเลิกการต่อเชื่อมคอมโพเนนต์เรียบร้อยแล้ว”);
}
การใช้ use effect() Hook สำหรับจัดการการเปลี่ยนแปลงสถานะ
useeffect ดำเนินการหลังจากการเรนเดอร์ทุก ครั้งนอกจากนี้ยังใช้เพื่อเรียกใช้รหัสบางอย่างเพื่อรับทราบการเปลี่ยนแปลงสถานะ คุณสามารถควบคุมเวลาของการดำเนินการเอฟเฟกต์ได้โดยส่งอาร์กิวเมนต์ที่สองใน useEffect() Hook อาร์กิวเมนต์ที่สองทำงานเป็นอาร์เรย์ของการขึ้นต่อกัน กล่าวคือ ถ้าตัวแปรที่เกี่ยวข้องมีการเปลี่ยนแปลง จะต้องเรียกใช้เอฟเฟกต์อีกครั้ง โปรดทราบว่าสถานะเป็นหนึ่งในประเภทตัวแปร
ส่วนต่อไปนี้แสดงตัวอย่างเพื่ออธิบายวิธีการใช้ hook เอฟเฟกต์ จัดการกับการเปลี่ยนแปลงสถานะ
ตัวอย่างเช่น คุณอาจต้องการเรียกใช้ผลข้างเคียงตามค่า "วัน" สมมติว่าคุณมีผลข้างเคียงที่จะแสดงข้อความอวยพรขึ้นอยู่กับค่าของวัน ค่าของวันจะถูกบันทึกไว้ในตัวแปรสถานะ
เมื่อใดก็ตามที่คุณเลือกวัน สถานะจะได้รับการอัปเดต การเปลี่ยนแปลงค่าสถานะช่วยให้คุณอัปเดตข้อความทักทายได้ คุณควรส่งตัวแปรสถานะไปยัง useEffect hook เป็นส่วนย่อยของอาร์เรย์การพึ่งพา
useEffect(() =>
{
// ผลข้างเคียง
}, [สถานะ]);
ในตัวอย่างข้างต้นของ useeffect react native ผลข้างเคียงจะทำงานหากค่าของตัวแปรสถานะอัพเดต
สำรวจหลักสูตรวิศวกรรมซอฟต์แวร์ยอดนิยมของเรา
วิทยาศาสตรมหาบัณฑิตสาขาวิทยาการคอมพิวเตอร์จาก LJMU & IIITB | โปรแกรมใบรับรองความปลอดภัยทางไซเบอร์ของ Caltech CTME |
Bootcamp การพัฒนาสแต็คเต็มรูปแบบ | โปรแกรม PG ใน Blockchain |
โปรแกรม Executive PG ในการพัฒนา Full Stack | |
ดูหลักสูตรทั้งหมดของเราด้านล่าง | |
หลักสูตรวิศวกรรมซอฟต์แวร์ |
การใช้ useEffect() Hook กับ API และคำขอเครือข่าย
คุณสามารถใช้ตะขอ 'useEffect()' กับ API และคำขอเครือข่ายเพื่อดึงข้อมูลจากเซิร์ฟเวอร์และจัดการกับข้อผิดพลาด ต่อไปนี้คือตัวอย่างวิธีใช้ 'useEffect()' กับ API และจัดการกับข้อผิดพลาดของเครือข่าย:
นำเข้า React, { useState, useEffect } จาก 'react';
ฟังก์ชัน MyComponent () {
const [ข้อมูล setData] = useState (null);
const [ข้อผิดพลาด setError] = useState (null);
useEffect(() => {
ฟังก์ชัน async fetchData () {
พยายาม {
การตอบสนอง = รอการดึงข้อมูล ('https://api.example.com/data');
ถ้า (!response.ok) {
โยนข้อผิดพลาดใหม่ ('การตอบสนองของเครือข่ายไม่โอเค');
}
const json = รอการตอบกลับ json ();
setData(json);
} จับ (ข้อผิดพลาด) {
setError (ข้อผิดพลาด);
}
}
ดึงข้อมูล ();
}, []);
ถ้า (ข้อผิดพลาด) {
กลับ <div>ข้อผิดพลาด: {error.message}</div>;
}
ถ้า (! data) {
กลับ <div>กำลังโหลด…</div>;
}
กลับ (
<div>
<p>{data.message}</p>
</div>
);
}
คุณสามารถแก้ไขตัวอย่างนี้เพื่อรวมฟังก์ชันเพิ่มเติมใดๆ ที่คุณต้องการในการจัดการคำขอเครือข่ายและการตอบสนองของ API
ขั้นสูง useEffect() เทคนิคการเกี่ยว
หนึ่งในเทคนิคขั้นสูง ของ useeffect react คือการท่องจำเป็นเทคนิคการเพิ่มประสิทธิภาพที่แคชเอาต์พุตของการเรียกใช้ฟังก์ชัน ต่อจากนั้นฟังก์ชัน useeffect return จะส่งคืนค่านั้นเมื่อป้อนอินพุตเดียวกันอีกครั้ง
อีกเทคนิค useEffect() Hook ที่รู้จักกันดีคือ useMemo Hook ช่วยให้คุณคำนวณค่าและจดจำได้ ไวยากรณ์ของมันคือ:
นำเข้า { useMemo } จาก 'ตอบสนอง'
const memoizedValue = useMemo(() => computeExpensiveValue(x, y), [x, y])
useEffect() การขึ้นต่อกันของ Hook
useEffect() การขึ้นต่อกันของ Hook มีรายการการขึ้นต่อกันของผลข้างเคียงของคุณ ในขณะที่ยังประกอบด้วยค่าสถานะหรือค่า prop อาร์กิวเมนต์การพึ่งพาช่วยให้คุณตรวจจับเหตุการณ์วงจรชีวิตของคอมโพเนนต์บางอย่างได้ เช่น คอมโพเนนต์ได้รับการเมาต์หรือค่าสเตต/พร็อพเฉพาะได้รับการอัปเดต
อาร์กิวเมนต์การพึ่งพาช่วยให้คุณควบคุมเวลาเมื่อมีการเรียกใช้ผลข้างเคียง โดยไม่คำนึงถึงรอบการแสดงผลของส่วนประกอบ
การแสดงผลตามเงื่อนไขด้วย useEffect() Hook
useEffect Hook ให้คุณใส่เงื่อนไขภายใน hook นี่คือตัวอย่าง
useEffect(() => {
ถ้า (ควรดำเนินการ) {
// (รายการเงื่อนไข)
}
}, [ควรดำเนินการ])
คุณต้องระบุเงื่อนไขบังคับที่คุณต้องการดำเนินการภายใต้ฟังก์ชัน shouldExecute
ใช้เอฟเฟกต์ () Hook กับ ComponentDidMount () และ ComponentDidUpdate ()
useEffect() Hook กับ componentDidUpdate():
useEffect() ตะขอ | คอมโพเนนต์ DidUpdate () |
useEffect() Hook ถูกเรียกใช้งานสำหรับ React lifecycles สามรอบ วงจรชีวิตของ React เหล่านี้คือ componentDidMount, componentDidUpdate และ componentWillUnmount | componentDidUpdate() ดำเนินการหลังจากอัปเดตคอมโพเนนต์ React แล้วเท่านั้น
|
มันไม่ได้นำเสนอสถานะการตอบสนองและค่าอุปกรณ์ประกอบฉากก่อนหน้านี้ | มันนำเสนออุปกรณ์ประกอบฉาก React และค่าสถานะก่อนหน้า |
สามารถใช้ได้เฉพาะในองค์ประกอบการทำงานของ React เท่านั้น | สามารถเรียกใช้ได้ภายในส่วนประกอบของคลาสเท่านั้น |
useEffect() Hook กับ componentDidMount():
useEffect() ตะขอ | ComponentDidMount() |
useEffect ถูกเรียกใช้แบบอะซิงโครนัสหลังจากที่เบราว์เซอร์วาดภาพหน้าจอแล้ว | มีการเรียกใช้ componentDidMount พร้อมกันก่อนที่เบราว์เซอร์จะแสดงหน้าจอ |
ได้รับค่าของการนับเมื่อสร้างเอฟเฟกต์ การให้ฟังก์ชันเอฟเฟ็กต์เป็น useEffect ให้มันคงอยู่ในหน่วยความจำ และที่นี่รู้เพียงว่าการนับคือ 0 | รหัสตามคลาสทำให้แน่ใจว่า componentDidMount ไม่มีการปิดเหนือสถานะ ดังนั้นจึงอ่านค่าปัจจุบันเท่านั้น |
ข้อผิดพลาดทั่วไปและแนวทางปฏิบัติที่ดีที่สุดกับ useEffect() Hook
ข้อผิดพลาดทั่วไป
1. ไม่กำหนดการพึ่งพา
useEffect ทำงานทุกครั้งที่คอมโพเนนต์ถูกเรนเดอร์ ดังนั้น คุณต้องกำหนดค่าที่ต้องทริกเกอร์การแสดงผลซ้ำ มิฉะนั้น ฟังก์ชัน useEffect ของคุณอาจสร้างปัญหาด้านประสิทธิภาพได้
2. ไม่ทำความสะอาดหลังจากเรียกใช้ useEffect hook
useEffect อาจส่งคืนฟังก์ชันการล้างข้อมูลที่ทำงานเมื่อไม่ได้ต่อเชื่อมคอมโพเนนต์ การไม่ล้างข้อมูลหลังจาก useEffect อาจทำให้เกิดการรั่วไหลของหน่วยความจำและข้อกังวลอื่นๆ ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องใช้ ฟัง ก์ ชั่นการล้าง useeffect
3. การใช้ setState ในฟังก์ชัน useEffect โดยไม่ต้องขึ้นต่อกัน
หากคุณอัปเดตสถานะใน useEffect จะทำให้เกิดการแสดงผลอื่น สิ่งนี้สามารถนำไปสู่การวนซ้ำไม่สิ้นสุด เพื่อป้องกันสิ่งนี้ คุณต้องกำหนดตัวแปรสถานะที่คุณกำลังอัพเดตเป็นการพึ่งพาในตะขอ useEffect เสมอ
สำรวจหลักสูตรการพัฒนาซอฟต์แวร์ฟรีของเรา
พื้นฐานของคลาวด์คอมพิวติ้ง | พื้นฐาน JavaScript ตั้งแต่เริ่มต้น | โครงสร้างข้อมูลและอัลกอริทึม |
เทคโนโลยีบล็อกเชน | ตอบสนองสำหรับผู้เริ่มต้น | พื้นฐาน Java หลัก |
ชวา | Node.js สำหรับผู้เริ่มต้น | JavaScript ขั้นสูง |
ปฏิบัติที่ดีที่สุด:
- หากคุณต้องการใช้ useEffect hook ตรวจสอบให้แน่ใจว่าใช้หนึ่งรายการต่อหนึ่งคอมโพเนนต์เท่านั้น ในกรณีของ useEffect hooks หลายอัน ทั้งหมดจะทำงานเมื่อใดก็ตามที่คอมโพเนนต์แสดงผล ดังนั้นจึงสามารถสร้างปัญหาด้านประสิทธิภาพและพฤติกรรมที่ไม่คาดคิดได้
- ตรวจสอบให้แน่ใจว่าไม่ได้ใช้งาน useEffect hook ภายในเงื่อนไข ลูป หรือฟังก์ชันที่ซ้อนกัน หากคุณใช้ State ภายในสำหรับลูป React จะสร้างตัวแปรสถานะใหม่ทุกครั้งที่ลูปทำงาน ดังนั้นจึงนำไปสู่พฤติกรรมที่ไม่คาดคิด
- ตรวจสอบให้แน่ใจว่าไม่ได้ใช้ตะขอ useEffect มากเกินไป พวกเขาสามารถทำให้รหัสของคุณอ่านยากและอาจส่งผลต่อประสิทธิภาพหากใช้มากเกินไป
- คุณต้องเรียก useEffect hook จากฟังก์ชัน React เท่านั้น หากคุณเรียกใช้จากส่วนประกอบของคลาส คุณจะเห็นข้อผิดพลาด
บทสรุป
เป็นการดีที่สุดที่จะใช้ useeffect ใน react หากคุณต้องการเข้าถึงอุปกรณ์ประกอบฉากและสถานะของส่วนประกอบอย่างง่ายดายโดยไม่ต้องเขียนโค้ดเพิ่มเติมใดๆช่วยลดผลข้างเคียงในส่วนประกอบได้อย่างมากเนื่องจากทำให้ง่ายต่อการดำเนินการผลข้างเคียงเมื่อสถานะหรืออุปกรณ์ประกอบฉากเปลี่ยนไป คุณสามารถพิจารณาแง่มุมและแนวทางปฏิบัติที่ดีที่สุดที่กล่าวถึงข้างต้นเพื่อให้แน่ใจว่าส่วนประกอบ React ของคุณทำงานได้อย่างเหมาะสมที่สุด
การเรียนรู้ทักษะการพัฒนาซอฟต์แวร์ที่จำเป็นเป็นสิ่งสำคัญในยุคปัจจุบัน คุณสามารถเสริม ทักษะ ให้ตัวเองด้วยทักษะอันล้ำสมัยเหล่านี้ได้โดยการเรียนต่อ ปริญญาโทสาขาวิทยาศาสตร์คอมพิวเตอร์ upGrad จาก LJMU หลักสูตรนี้ทำให้คุณเป็นนักพัฒนาซอฟต์แวร์ที่เชี่ยวชาญโดยมอบทักษะต่างๆ เช่น Java, Python และความเชี่ยวชาญในสาขาที่เกี่ยวข้อง การเรียนรู้แง่มุมที่ครอบคลุมในหลักสูตรนี้อย่างถี่ถ้วนจะช่วยให้คุณสำรวจโอกาสในการทำงาน เช่น นักพัฒนาจาวาสคริปต์ วิศวกรซอฟต์แวร์ และวิศวกรแบ็กเอนด์
นอกเหนือจากทักษะการพัฒนาซอฟต์แวร์ที่เชี่ยวชาญแล้ว upGrad ยังช่วยยกระดับอาชีพของคุณในฐานะนักพัฒนาแบบฟูลสแต็กผ่านหลักสูตรต่างๆ เช่น โปรแกรม Executive PG ในการพัฒนาฟูลสแต็กจาก IIITB และ บูทแคมป์พัฒนาซอฟต์แวร์ฟูลสแต็ ก โปรแกรมเหล่านี้มอบแพลตฟอร์มการเรียนรู้ที่ดื่มด่ำซึ่งช่วยให้ผู้สมัครได้รับทักษะการพัฒนาแบบฟูลสแต็กที่เรียกร้องและปูทางสู่อาชีพที่ประสบความสำเร็จได้อย่างมีประสิทธิภาพ!
ข้อดีของ React Hooks คืออะไร?
React Hooks รวมถึง useeffect react ให้วิธีวงจรชีวิตเขียนเป็นเส้นตรง มันแสดงลำดับที่ลื่นไหลซึ่งแตกต่างจากการแยกระหว่างส่วนประกอบของคลาสที่เกี่ยวข้อง หลังจากปรับให้เหมาะสมแล้ว React Hooks จะให้บริการแนวทางที่เร็วที่สุดสำหรับส่วนประกอบการทำงาน
กรณีการใช้งานทั่วไปของ useEffect() Hook คืออะไร?
กรณีการใช้งานทั่วไปของ useEffect Hook ได้แก่ - การเพิ่มตัวฟังเหตุการณ์สำหรับปุ่ม, การดำเนินการเมื่ออุปกรณ์หรือสถานะเปลี่ยนแปลง, การดึงข้อมูลจาก API เมื่อส่วนประกอบเมานต์, หรือการล้างตัวฟังเหตุการณ์เมื่อใดก็ตามที่คอมโพเนนต์ยกเลิกการต่อเชื่อม
ฉันควรใช้ useEffect เมื่อใด
นอกจากการทำความเข้าใจสิ่งที่ useeffect ใน react แล้ว คุณต้องเข้าใจด้วยว่าควรใช้เมื่อไร คุณสามารถวาง useEffect ภายในคอมโพเนนต์เพื่อเข้าถึงตัวแปรสถานะการนับ (หรืออุปกรณ์ประกอบฉากใดๆ) ได้โดยตรงจากเอฟเฟกต์ คุณใช้รหัสนี้ได้หากต้องการเรียกใช้โค้ดที่เกิดขึ้นระหว่างวงจรชีวิตของคอมโพเนนต์แทนที่จะใช้กับเหตุการณ์ DOM หรือการโต้ตอบของผู้ใช้