ข้ามไปยังเนื้อหา

Lifecycle Callbacks

Web Components มี lifecycle callbacks 4 ตัวที่ browser จะเรียกใช้งานโดยอัตโนมัติในช่วงเวลาต่าง ๆ ของการทำงาน ทำให้คุณสามารถเชื่อมต่อกับจุดสำคัญต่าง ๆ ในชีวิตของ element ได้

Callbackเมื่อไหร่ที่ถูกเรียก
constructorเมื่อสร้าง instance ของ element ขึ้นมาใหม่
connectedCallbackเมื่อ element ถูกแทรกเข้าไปใน DOM
attributeChangedCallbackเมื่อ attribute ที่ถูก observe มีการเปลี่ยนแปลง
disconnectedCallbackเมื่อ element ถูกนำออกจาก DOM

แผนภาพด้านล่างแสดงลำดับทั่วไปของ lifecycle callbacks:

flowchart LR
  C["constructor
(element created)"]
  CC["connectedCallback
(inserted into DOM)"]
  AC["attributeChangedCallback
(attribute changed)
— fires each time —"]
  DC["disconnectedCallback
(removed from DOM)"]
  C --> CC
  CC --> AC
  AC --> AC
  CC --> DC
Web Component Lifecycle Timeline

constructor จะถูกเรียกเมื่อสร้าง instance ของ element ขึ้นมาใหม่ ไม่ว่าจะผ่านทาง document.createElement หรือ parser ของ browser ก็ตาม กฎสำคัญคือต้องเรียก super() เป็น statement แรกเสมอ และห้ามแตะ DOM, attribute หรือ children ในขั้นตอนนี้

connectedCallback จะถูกเรียกทุกครั้งที่ element ถูกแทรกเข้าไปใน document ที่เชื่อมต่ออยู่ นี่คือจุดที่เหมาะสมสำหรับการ render และการตั้งค่า event listener

attributeChangedCallback จะถูกเรียกเมื่อ attribute ที่อยู่ใน observedAttributes มีการเพิ่ม, เปลี่ยนแปลง หรือลบออก คุณต้องระบุรายการ attribute ที่ต้องการ observe ด้วย static getter ชื่อ observedAttributes

disconnectedCallback จะถูกเรียกเมื่อ element ถูกนำออกจาก DOM ใช้สำหรับทำความสะอาด เช่น การลบ event listener หรือยกเลิก timer

ลองดู console log ในแผง HTML เพื่อสังเกตว่า callbacks แต่ละตัวถูกเรียกเมื่อไหร่

Lifecycle callback ใดที่ถูกเรียกเมื่อ element ถูกแทรกเข้าไปใน document?
สิ่งใดที่จำเป็นให้ attributeChangedCallback รับการแจ้งเตือน?
Callback ใดที่ถูกเรียกเมื่อ element ถูกนำออกจาก DOM?