โปรดอธิบายกับฉันว่าทำไมฉันถึงได้รับข้อผิดพลาดนี้: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.
เห็นได้ชัดว่าฉันได้รับมันในโหมด dev เท่านั้นมันไม่ได้เกิดขึ้นในงานสร้างของฉัน แต่มันก็น่ารำคาญมากและฉันก็ไม่เข้าใจถึงประโยชน์ของการมีข้อผิดพลาดในสภาพแวดล้อม dev ของฉันที่จะไม่ปรากฏขึ้นบนผลิตภัณฑ์ - อาจเป็นเพราะฉันขาดความเข้าใจ
โดยปกติการแก้ไขนั้นง่ายพอฉันเพิ่งตัดข้อผิดพลาดที่ทำให้เกิดรหัสใน setTimeout ดังนี้:
setTimeout(()=> {
this.isLoading = true;
}, 0);
หรือบังคับให้ตรวจจับการเปลี่ยนแปลงด้วยตัวสร้างเช่นนี้constructor(private cd: ChangeDetectorRef) {}
:
this.isLoading = true;
this.cd.detectChanges();
แต่ทำไมฉันจึงพบข้อผิดพลาดนี้อยู่ตลอดเวลา ฉันต้องการที่จะเข้าใจเพื่อที่จะได้หลีกเลี่ยงการแก้ไขแฮ็กเหล่านี้ในอนาคต