ทำงานแบบอะซิงโครนัสด้วย useEffect สะอาดและปลอดภัย
จากการเรียก APIเพื่อตั้งค่าการหน่วงเวลาการหมดเวลาฉันแน่ใจว่าคุณเคยสงสัยแล้วว่าจะทำอย่างไรอย่างถูกต้องเมื่อใช้ React useEffecthook หากเสียงนั้นยังคงไม่ชัดเจน แสดงว่าบทความนี้เหมาะสำหรับคุณ ถ้าไม่อย่างนั้น อย่างน้อยคุณอาจเรียนรู้วิธีที่แตกต่างออกไปเพื่อให้งานสำเร็จลุล่วงหรือรู้สึกมั่นใจมากขึ้นในขณะทำงาน
ผมจะนำเสนอ 3 วิธีในการทำอย่างปลอดภัยและเป็นระเบียบเรียบร้อย แต่ก่อนอื่น ฉันต้องการแสดงสิ่งที่คุณไม่ควรทำ
อย่าทำงานแบบ async โดยตรงใน useEffect แต่ให้รวมงาน async ของคุณไว้ในฟังก์ชันและเรียกใช้งานจาก useEffect เท่านั้น
นี่คือตัวอย่างสิ่งที่คุณไม่ควรทำ:
useEffect(async () => {
await getData();
},[]);
นอกจากนี้ การทำสิ่งที่ตัวอย่าง BAD นี้แสดงให้เห็น จะทำให้เกิดข้อผิดพลาด React:
การเรียกกลับของเอฟเฟกต์เป็นแบบซิงโครนัสเพื่อป้องกันสภาพการแข่งขัน
เอาล่ะ ตอนนี้เราปลอดภัยแล้วที่จะก้าวไปสู่แนวทางปฏิบัติที่ดี ⬇️
หากคุณต้องการใช้งานแบบอะซิงโครนัส เพื่อรับข้อมูลบางส่วนจาก API และอัปเดตสถานะการโหลดของส่วนประกอบของคุณ คุณต้องกำหนดฟังก์ชันภายใน hook แล้วเรียกมันว่า:
useEffect(() => {
async function getData() {
setLoading(false);
const reponse = await myApi.getSomeGoodData()
setLoading(true);
}
getData();
},[]);
หากคุณวางแผนที่จะใช้ฟังก์ชันอะซิงโครนัสที่คุณกำหนดไว้ซ้ำ ความคิดที่ดีคือการกำหนดฟังก์ชันดังกล่าวในเนื้อหาองค์ประกอบการทำงานของคุณ ที่ห่อด้วยuseCallbackhook ตรวจสอบออก:
const getData = useCallback(() => {
setLoading(false);
const reponse = await myApi.getSomeGoodData()
setLoading(true);
}, [])
useEffect(() => {
getData()
},[getData])
2 ตัวอย่างก่อนหน้านี้เน้นไปที่การดึงข้อมูลและอัปเดตสถานะส่วนประกอบเป็นหลัก นี่คือการแสดงสถานการณ์ทั่วไปสำหรับงาน async ภายใน useEffect ซึ่งกำลังตั้งค่าช่วงเวลาหรือหมดเวลา
เคล็ดลับสำหรับมันคือการล้างการหมดเวลาและช่วงเวลาที่กำหนดไว้ในไฟล์useEffect.
useEffect(() => {
const timeout = setTimeout(() => {
// do something
}, 100)
return () => {
clearTimeout(timeout);
}
},[])
useEffect(() => {
const interval = setInterval(() => {
// do something
}, 100)
return () => {
clearInterval(interval);
}
},[])
ตัวอย่างข้างต้นจะช่วยให้คุณครอบคลุมถึง 99.99% ของสถานการณ์ async ที่คุณอาจพบในขณะที่ React กำลังพัฒนา เพียงจำไว้ว่าให้คำนึงถึงการพึ่งพาเอฟเฟกต์ หากคุณไม่พบกรณีของคุณในตัวอย่างด้านล่าง แสดงความคิดเห็นแล้วฉันจะตรวจสอบให้
ขอบคุณสำหรับการอ่าน
—- เฟอร์นันโด อโบลาฟิโอ
เมื่อคุณส่งคำขอไปที่ facebook.com คอมพิวเตอร์ของคุณจะค้นหาชื่อโดเมนเพื่อแปลชื่อโดเมนนั้นเป็นที่อยู่ IP เพื่อให้คอมพิวเตอร์ของคุณสามารถเชื่อมต่อได้
ในปี 2022 ฉันเปลี่ยนจากบทบาทที่ไม่ใช่ด้านเทคนิคมาเป็นความปลอดภัยทางไซเบอร์ ฉันได้รับปริญญาใบแรกในภาษาเยอรมัน ฉันรู้ว่าคุณตกใจและสงสัยว่าฉันสามารถเปลี่ยนแปลงได้สำเร็จได้อย่างไร มันเพิ่งเกิดขึ้น
เมื่อวานนี้ เราปิดการแข่งขัน Eurovision Song Contest ปีนี้ด้วยตอนจบที่สดใสและวุ่นวาย โดย Loreen นักร้องชาวสวีเดนคว้าถ้วยรางวัลกลับบ้าน กลายเป็นผู้หญิงคนแรกที่ชนะสองครั้งและนำมงกุฎกลับมายังสวีเดน 50 ปีหลังจาก ABBA ชนะการแข่งขัน กับ “วอเตอร์ลู” พวกเขากลายเป็นหนึ่งในการแสดงที่ยิ่งใหญ่ที่สุดในวงการเพลงป๊อป
ผู้ที่มีความคิดเชิงเหตุผลย่อมรู้ดีว่าแวดวงการเมืองและสื่อถูกครอบงำโดยฝ่ายซ้าย แม้แต่ฝ่ายซ้ายสุด สถานการณ์ที่สร้างความไม่สมดุลในวาทกรรมทางการเมือง ในด้านศาสนา ความไม่สมดุลนี้เห็นได้ชัดเจน: หนังสือพิมพ์และเครือข่ายฝ่ายซ้ายไม่เร่งรีบที่จะปกป้องความเชื่อของคริสเตียน
ในโลกที่เชื่อมต่อถึงกันทุกวันนี้ ภัยคุกคามจากการโจมตีทางไซเบอร์นั้นแพร่หลายมากขึ้นกว่าเดิม อาชญากรไซเบอร์และผู้มีบทบาทในระดับชาติพยายามใช้ประโยชน์จากช่องโหว่และขโมยข้อมูลที่มีค่าอย่างต่อเนื่อง ซึ่งก่อให้เกิดความเสี่ยงที่สำคัญต่อองค์กรทุกขนาด
เมื่อสัปดาห์ที่แล้วฉันสังเกตเห็นข่าวประชาสัมพันธ์ที่เผยแพร่ผ่าน PressGazette (เว็บไซต์ข่าวของสื่ออังกฤษ) บทความประกาศว่า Acast ซึ่งเป็นบริษัทโฮสติ้งและโฆษณาพอดคาสต์ของ Scandi จะเป็นผู้นำกลุ่มผู้เผยแพร่ "อาจมีอิทธิพลมากที่สุด" ในพอดคาสต์