Vue生命週期探討
阿新 • • 發佈:2021-01-13
從一道面試題開始
測試程式碼:
<!DOCTYPE html>
<html>
<head>
<title>Vue原始碼剖析</title>
<script src="vue.js"></script>
</head>
<body>
<div id="demo">
<h1>宣告週期</h1>
< p>{{foo}}</p>
</div>
<script>
// 建立例項
const app = new Vue({
el: '#demo',
data:{
foo: 'foo'
},
beforeCreate(){console.log('beforeCreate')},
created(){console.log('created '+this.$el)},
beforeMount(){console.log('beforeMount')},
mounted(){
setTimeout(() => {
this.foo = 'foooooo'
}, 2000);
console.log('mounted '+this.$el)},
beforeUpdate(){console.log('beforeUpdate')},
updated (){console.log('updated')},
});
</script>
</body>
</html>
結論:
- 三個階段:初始化、更新、銷燬
- 初始化:beforeCreate、created、beforeMount、mounted
- 更新:beforeUpdate、updated
- 銷燬:beforeDestroy、destroyed
使用場景分析
{
beforeCreate(){} // 執行時元件例項還未建立,通常用於外掛開發中執行一些初始化任務
created(){} // 元件初始化完畢,各種資料可以使用,常用於非同步資料獲取
beforeMounted(){} // 未執行渲染、更新,dom未建立
mounted(){} // 初始化結束,dom已建立,可用於獲取訪問資料和dom元素
beforeUpdate(){} // 更新前,可用於獲取更新前各種狀態
updated(){} // 更新後,所有狀態已是最新
beforeDestroy(){} // 銷燬前,可用於一些定時器或訂閱的取消
destroyed(){} // 元件已銷燬,作用同上
}