วิธีใช้ async กับ useEffect

ทำงานแบบอะซิงโครนัสด้วย useEffect สะอาดและปลอดภัย

จากการเรียก APIเพื่อตั้งค่าการหน่วงเวลาการหมดเวลาฉันแน่ใจว่าคุณเคยสงสัยแล้วว่าจะทำอย่างไรอย่างถูกต้องเมื่อใช้ React useEffecthook หากเสียงนั้นยังคงไม่ชัดเจน แสดงว่าบทความนี้เหมาะสำหรับคุณ ถ้าไม่อย่างนั้น อย่างน้อยคุณอาจเรียนรู้วิธีที่แตกต่างออกไปเพื่อให้งานสำเร็จลุล่วงหรือรู้สึกมั่นใจมากขึ้นในขณะทำงาน

ผมจะนำเสนอ 3 วิธีในการทำอย่างปลอดภัยและเป็นระเบียบเรียบร้อย แต่ก่อนอื่น ฉันต้องการแสดงสิ่งที่คุณไม่ควรทำ

สิ่งที่คุณไม่ควรทำ ❌

อย่าทำงานแบบ async โดยตรงใน useEffect แต่ให้รวมงาน async ของคุณไว้ในฟังก์ชันและเรียกใช้งานจาก useEffect เท่านั้น

นี่คือตัวอย่างสิ่งที่คุณไม่ควรทำ:

useEffect(async () => {
   await getData();
},[]);

นอกจากนี้ การทำสิ่งที่ตัวอย่าง BAD นี้แสดงให้เห็น จะทำให้เกิดข้อผิดพลาด React:

การเรียกกลับของเอฟเฟกต์เป็นแบบซิงโครนัสเพื่อป้องกันสภาพการแข่งขัน

เอาล่ะ ตอนนี้เราปลอดภัยแล้วที่จะก้าวไปสู่แนวทางปฏิบัติที่ดี ⬇️

1. กำหนดฟังก์ชัน async ภายใน hook

หากคุณต้องการใช้งานแบบอะซิงโครนัส เพื่อรับข้อมูลบางส่วนจาก API และอัปเดตสถานะการโหลดของส่วนประกอบของคุณ คุณต้องกำหนดฟังก์ชันภายใน hook แล้วเรียกมันว่า:

useEffect(() => {
async function getData() {
    setLoading(false);
    const reponse = await myApi.getSomeGoodData()
    setLoading(true);
   }
getData();
},[]);

2. กำหนดฟังก์ชัน async นอก hook

หากคุณวางแผนที่จะใช้ฟังก์ชันอะซิงโครนัสที่คุณกำหนดไว้ซ้ำ ความคิดที่ดีคือการกำหนดฟังก์ชันดังกล่าวในเนื้อหาองค์ประกอบการทำงานของคุณ ที่ห่อด้วยuseCallbackhook ตรวจสอบออก:

const getData = useCallback(() => {
    setLoading(false);
    const reponse = await myApi.getSomeGoodData()
    setLoading(true);
}, [])
useEffect(() => {
getData()
},[getData])

3. การตั้งค่าช่วงเวลาหรือหมดเวลา

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 กำลังพัฒนา เพียงจำไว้ว่าให้คำนึงถึงการพึ่งพาเอฟเฟกต์ หากคุณไม่พบกรณีของคุณในตัวอย่างด้านล่าง แสดงความคิดเห็นแล้วฉันจะตรวจสอบให้

ขอบคุณสำหรับการอ่าน

—- เฟอร์นันโด อโบลาฟิโอ

Suggested posts

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

ตัดตอนมาจาก Small, Sharp Software Tools โดย Brian P. Hogan

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

เมื่อคุณส่งคำขอไปที่ facebook.com คอมพิวเตอร์ของคุณจะค้นหาชื่อโดเมนเพื่อแปลชื่อโดเมนนั้นเป็นที่อยู่ IP เพื่อให้คอมพิวเตอร์ของคุณสามารถเชื่อมต่อได้

เคล็ดลับสำหรับการเปลี่ยนไปสู่ความปลอดภัยทางไซเบอร์โดยไม่มีพื้นฐานทางเทคนิค

เคล็ดลับสำหรับการเปลี่ยนไปสู่ความปลอดภัยทางไซเบอร์โดยไม่มีพื้นฐานทางเทคนิค

ในปี 2022 ฉันเปลี่ยนจากบทบาทที่ไม่ใช่ด้านเทคนิคมาเป็นความปลอดภัยทางไซเบอร์ ฉันได้รับปริญญาใบแรกในภาษาเยอรมัน ฉันรู้ว่าคุณตกใจและสงสัยว่าฉันสามารถเปลี่ยนแปลงได้สำเร็จได้อย่างไร มันเพิ่งเกิดขึ้น

Related posts

ศิลปะเคยไม่ฝักใฝ่ฝ่ายใดหรือไม่?

ศิลปะเคยไม่ฝักใฝ่ฝ่ายใดหรือไม่?

เมื่อวานนี้ เราปิดการแข่งขัน Eurovision Song Contest ปีนี้ด้วยตอนจบที่สดใสและวุ่นวาย โดย Loreen นักร้องชาวสวีเดนคว้าถ้วยรางวัลกลับบ้าน กลายเป็นผู้หญิงคนแรกที่ชนะสองครั้งและนำมงกุฎกลับมายังสวีเดน 50 ปีหลังจาก ABBA ชนะการแข่งขัน กับ “วอเตอร์ลู” พวกเขากลายเป็นหนึ่งในการแสดงที่ยิ่งใหญ่ที่สุดในวงการเพลงป๊อป

การข่มเหงคริสเตียน: อาชญากรรมจากความเกลียดชังที่เราไม่พูดถึง

ลืมเรื่องโรคกลัวอิสลาม: คริสเตียน (และชาวยิว) เป็นเหยื่อหลักของอาชญากรรมจากความเกลียดชังทางศาสนา

การข่มเหงคริสเตียน: อาชญากรรมจากความเกลียดชังที่เราไม่พูดถึง

ผู้ที่มีความคิดเชิงเหตุผลย่อมรู้ดีว่าแวดวงการเมืองและสื่อถูกครอบงำโดยฝ่ายซ้าย แม้แต่ฝ่ายซ้ายสุด สถานการณ์ที่สร้างความไม่สมดุลในวาทกรรมทางการเมือง ในด้านศาสนา ความไม่สมดุลนี้เห็นได้ชัดเจน: หนังสือพิมพ์และเครือข่ายฝ่ายซ้ายไม่เร่งรีบที่จะปกป้องความเชื่อของคริสเตียน

คลังข้อมูลภัยคุกคามนั้น: เล่มที่ 7 Black Basta

คลังข้อมูลภัยคุกคามนั้น: เล่มที่ 7 Black Basta

ในโลกที่เชื่อมต่อถึงกันทุกวันนี้ ภัยคุกคามจากการโจมตีทางไซเบอร์นั้นแพร่หลายมากขึ้นกว่าเดิม อาชญากรไซเบอร์และผู้มีบทบาทในระดับชาติพยายามใช้ประโยชน์จากช่องโหว่และขโมยข้อมูลที่มีค่าอย่างต่อเนื่อง ซึ่งก่อให้เกิดความเสี่ยงที่สำคัญต่อองค์กรทุกขนาด

อะไรทำให้พอดคาสต์มีอิทธิพล?

อะไรทำให้พอดคาสต์มีอิทธิพล?

เมื่อสัปดาห์ที่แล้วฉันสังเกตเห็นข่าวประชาสัมพันธ์ที่เผยแพร่ผ่าน PressGazette (เว็บไซต์ข่าวของสื่ออังกฤษ) บทความประกาศว่า Acast ซึ่งเป็นบริษัทโฮสติ้งและโฆษณาพอดคาสต์ของ Scandi จะเป็นผู้นำกลุ่มผู้เผยแพร่ "อาจมีอิทธิพลมากที่สุด" ในพอดคาสต์