當(dāng)我們進(jìn)入Vue應(yīng)用時(shí),Vue會(huì)在掛載過(guò)程中執(zhí)行一系列的鉤子函數(shù)。
// 創(chuàng)建Vue實(shí)例 new Vue({ el: '#app', beforeCreate() { console.log('beforeCreate') }, created() { console.log('created') }, beforeMount() { console.log('beforeMount') }, mounted() { console.log('mounted') }, beforeUpdate() { console.log('beforeUpdate') }, updated() { console.log('updated') }, beforeDestroy() { console.log('beforeDestroy') }, destroyed() { console.log('destroyed') } })
在beforeCreate鉤子函數(shù)中,Vue實(shí)例還未被創(chuàng)建并且數(shù)據(jù)也還未被觀測(cè)。在created鉤子函數(shù)中,Vue實(shí)例和數(shù)據(jù)已經(jīng)被觀測(cè),但是DOM還未被渲染。
當(dāng)Vue實(shí)例被掛載到DOM上時(shí),會(huì)先執(zhí)行beforeMount鉤子函數(shù),該函數(shù)在DOM渲染之前被調(diào)用。
mounted鉤子函數(shù)是在Vue實(shí)例掛載到DOM上后被調(diào)用的函數(shù),該函數(shù)中DOM已經(jīng)被渲染,可以訪問(wèn)DOM元素以及操作DOM元素。
當(dāng)Vue實(shí)例的數(shù)據(jù)發(fā)生變化時(shí),會(huì)先執(zhí)行beforeUpdate鉤子函數(shù)。在該函數(shù)中可以進(jìn)行一些數(shù)據(jù)處理,但是不能對(duì)DOM進(jìn)行操作。
在updated鉤子函數(shù)中,Vue實(shí)例中發(fā)生的數(shù)據(jù)變化已經(jīng)被應(yīng)用于DOM,并且DOM已經(jīng)被重新渲染。
當(dāng)我們需要銷毀Vue實(shí)例時(shí),會(huì)先執(zhí)行beforeDestroy鉤子函數(shù),在該函數(shù)中可以進(jìn)行一些實(shí)例銷毀之前的清理工作。
當(dāng)Vue實(shí)例被銷毀時(shí),會(huì)執(zhí)行destroyed鉤子函數(shù)。在該函數(shù)中一般進(jìn)行一些清理工作,例如清除事件監(jiān)聽(tīng)器、清除計(jì)時(shí)器和請(qǐng)求等操作。