新聞中心
Vue組件有生命周期嗎?

成都創(chuàng)新互聯(lián)公司服務(wù)緊隨時(shí)代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過10余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計(jì)師、專業(yè)的網(wǎng)站實(shí)施團(tuán)隊(duì)以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對(duì)網(wǎng)站進(jìn)行成都做網(wǎng)站、成都網(wǎng)站建設(shè)、建設(shè)、維護(hù)、更新和改版,實(shí)現(xiàn)客戶網(wǎng)站對(duì)外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。
是的,Vue組件有生命周期,在Vue中,組件的生命周期分為以下幾個(gè)階段:創(chuàng)建、掛載、更新、銷毀,每個(gè)階段都有相應(yīng)的生命周期鉤子函數(shù),我們可以在這些鉤子函數(shù)中執(zhí)行一些操作,以便在組件的不同階段執(zhí)行特定的任務(wù),下面我們?cè)敿?xì)介紹一下Vue組件的生命周期。
1. 創(chuàng)建階段
在Vue實(shí)例化過程中,會(huì)依次調(diào)用組件的beforeCreate、created和afterCreate生命周期鉤子函數(shù)。beforeCreate和created是在組件實(shí)例被創(chuàng)建之后立即調(diào)用的,而afterCreate是在組件實(shí)例被創(chuàng)建并完成初始化之后調(diào)用的。
export default {
data() {
return {
message: 'Hello Vue!'
};
},
beforeCreate() {
console.log('beforeCreate');
},
created() {
console.log('created');
},
afterCreate() {
console.log('afterCreate');
}
};
2. 掛載階段
當(dāng)Vue實(shí)例將組件渲染到DOM中時(shí),會(huì)依次調(diào)用組件的beforeMount、mounted和afterMount生命周期鉤子函數(shù)。beforeMount和mounted是在組件掛載到DOM之前和之后立即調(diào)用的,而afterMount是在組件掛載到DOM之后調(diào)用的。
export default {
data() {
return {
message: 'Hello Vue!'
};
},
beforeMount() {
console.log('beforeMount');
},
mounted() {
console.log('mounted');
},
afterMount() {
console.log('afterMount');
}
};
3. 更新階段
當(dāng)Vue實(shí)例接收到數(shù)據(jù)更新通知時(shí),會(huì)重新渲染組件,并依次調(diào)用組件的beforeUpdate、updated和afterUpdate生命周期鉤子函數(shù)。beforeUpdate和updated是在組件更新之前和之后立即調(diào)用的,而afterUpdate是在組件更新之后調(diào)用的。
export default {
data() {
return {
message: 'Hello Vue!'
};
},
beforeUpdate() {
console.log('beforeUpdate');
},
updated() {
console.log('updated');
},
afterUpdate() {
console.log('afterUpdate');
}
};
4.銷毀階段
當(dāng)Vue實(shí)例卸載時(shí),會(huì)依次調(diào)用組件的beforeDestroy、destroyed和afterDestroy生命周期鉤子函數(shù)。beforeDestroy和destroyed是在組件銷毀之前和之后立即調(diào)用的,而afterDestroy是在組件銷毀之后調(diào)用的,在這些鉤子函數(shù)中,我們可以進(jìn)行一些資源釋放的操作,例如取消事件監(jiān)聽、刪除定時(shí)器等。
export default {
data() {
return {
message: 'Hello Vue!'
};
},
beforeDestroy() {
console.log('beforeDestroy');
vm.$off('event-name'); //取消事件監(jiān)聽
vm.timer = null; //刪除定時(shí)器
vm = null; //設(shè)置為null,避免在回調(diào)函數(shù)中訪問已經(jīng)銷毀的實(shí)例導(dǎo)致錯(cuò)誤
vm.$destroy(); //銷毀實(shí)例(可選)如果使用了Vue3的Composition API,這一步可以省略,因?yàn)樵诮M件銷毀時(shí)會(huì)自動(dòng)觸發(fā)這個(gè)方法,但在Vue2中,我們需要手動(dòng)調(diào)用這個(gè)方法來確保實(shí)例被正確銷毀,在某些情況下,我們可能需要手動(dòng)銷毀一個(gè)已經(jīng)解除了父子關(guān)系的實(shí)例(例如使用v-if渲染的元素),這時(shí)就需要手動(dòng)調(diào)用這個(gè)方法。
vm = null; //再次設(shè)置為null,確保實(shí)例已經(jīng)被銷毀,這是為了防止在回調(diào)函數(shù)中訪問已經(jīng)銷毀的實(shí)例導(dǎo)致錯(cuò)誤,在Vue2中,我們需要手動(dòng)設(shè)置實(shí)例為null,而不是直接將其置為undefined或者null,因?yàn)樵谀承┣闆r下(例如使用閉包捕獲變量),將實(shí)例設(shè)置為null并不能完全解除其引用關(guān)系,所以我們需要先將其設(shè)置為null,然后再檢查是否已經(jīng)被置為null,如果已經(jīng)被置為null,那么就不需要再執(zhí)行任何操作了,否則,我們需要繼續(xù)執(zhí)行后續(xù)的操作,例如手動(dòng)移除DOM元素等,我們需要再次將實(shí)例設(shè)置為null,以確保實(shí)例已經(jīng)被完全銷毀,這樣可以避免在回調(diào)函數(shù)中訪問已經(jīng)銷毀的實(shí)例導(dǎo)致錯(cuò)誤。
分享名稱:vue組件有生命周期嗎
標(biāo)題URL:http://m.5511xx.com/article/copjooc.html


咨詢
建站咨詢
