Middle
Porozprávajte o životnom cykle komponentu vo Vue.js.
sobes.tech AI
Odpoveď od AI
Životný cyklus komponentu Vue.js je súbor hookov, ktoré sa volajú v rôznych fázach jej existencie: od vytvorenia po zničenie.
Hlavné hooky:
-
Vytvorenie:
beforeCreate: Komponenta bola vytvorená, ale údaje a metódy ešte nie sú inicializované.created: Komponenta bola vytvorená, údaje a metódy sú inicializované, ale DOM ešte nie je vykreslený.
-
Montáž:
beforeMount: Šablóna bola skompilovaná, ale komponent ešte nebol pridaný do DOM.mounted: Komponent bol pridaný do DOM, prístup k prvkom DOM cez$elje možný.
-
Aktualizácia:
beforeUpdate: Dáta komponentu sa zmenili, ale DOM ešte nebol aktualizovaný.updated: DOM bol po zmene dát aktualizovaný.
-
Demontáž:
beforeUnmount: Komponent sa chystá byť odstránený z DOM. Tu je možné vyčistiť časovače, poslucháče udalostí atď.unmounted: Komponent bol odstránený z DOM.
Okrem hlavných hookov existujú hooky na ladenie (Debug) a spracovanie chýb (Error Handling):
renderTracked: Sleduje reaktívne závislosti počas renderovania.renderTriggered: Volá sa, keď je potrebné komponentu znovu renderovať kvôli zmene v reaktívnom stave.errorCaptured: Zachytáva chyby, ktoré vznikli v deťoch komponentoch.
// Príklad použitia hookov
export default {
data() {
return {
message: 'Ahoj Vue!'
};
},
beforeCreate() {
console.log('beforeCreate: Komponenta bola vytvorená, údaje a metódy nie sú dostupné.');
},
created() {
console.log('created: Komponenta bola vytvorená, údaje a metódy sú dostupné.');
console.log('Správa:', this.message);
},
beforeMount() {
console.log('beforeMount: Šablóna bola skompilovaná.');
},
mounted() {
console.log('mounted: Komponent bol pridaný do DOM.');
console.log('Prvok DOM:', this.$el);
},
beforeUpdate() {
console.log('beforeUpdate: Dáta sa zmenili, DOM ešte nebol aktualizovaný.');
},
updated() {
console.log('updated: DOM bol aktualizovaný.');
},
beforeUnmount() {
console.log('beforeUnmount: Komponent sa odstraňuje.');
},
unmounted() {
console.log('unmounted: Komponent bol odstránený z DOM.');
}
};