Vue - 生命周期詳解


Vue實例有一個完整的生命周期,也就是說從開始創建、初始化數據、編譯模板、掛在DOM、渲染-更新-渲染、卸載等一系列過程,我們成為Vue 實例的生命周期,鈎子就是在某個階段給你一個做某些處理的機會。

 

 

beforeCreate( 創建前 )

在實例初始化之后,數據觀測和事件配置之前被調用,此時組件的選項對象還未創建,el 和 data 並未初始化,因此無法訪問methods, data, computed等上的方法和數據。

created ( 創建后 )

實例已經創建完成之后被調用,在這一步,實例已完成以下配置:數據觀測、屬性和方法的運算,watch/event事件回調,完成了data 數據的初始化,el沒有。 然而,掛在階段還沒有開始, $el屬性目前不可見,這是一個常用的生命周期,因為你可以調用methods中的方法,改變data中的數據,並且修改可以通過vue的響應式綁定體現在頁面上,,獲取computed中的計算屬性等等,通常我們可以在這里對實例進行預處理,也有一些童鞋喜歡在這里發ajax請求,值得注意的是,這個周期中是沒有什么方法來對實例化過程進行攔截的,因此假如有某些數據必須獲取才允許進入頁面的話,並不適合在這個方法發請求,建議在組件路由鈎子beforeRouteEnter中完成

beforeMount

掛在開始之前被調用,相關的render函數首次被調用(虛擬DOM),實例已完成以下的配置: 編譯模板,把data里面的數據和模板生成html,完成了el和data 初始化,注意此時還沒有掛在html到頁面上。

mounted

掛在完成,也就是模板中的HTML渲染到HTML頁面中,此時一般可以做一些ajax操作,mounted只會執行一次。

beforeUpdate

在數據更新之前被調用,發生在虛擬DOM重新渲染和打補丁之前,可以在該鈎子中進一步地更改狀態,不會觸發附加地重渲染過程

updated(更新后)

在由於數據更改導致地虛擬DOM重新渲染和打補丁只會調用,調用時,組件DOM已經更新,所以可以執行依賴於DOM的操作,然后在大多是情況下,應該避免在此期間更改狀態,因為這可能會導致更新無限循環,該鈎子在服務器端渲染期間不被調用

beforeDestroy(銷毀前)

在實例銷毀之前調用,實例仍然完全可用,

  1. 這一步還可以用this來獲取實例,
  2. 一般在這一步做一些重置的操作,比如清除掉組件中的定時器 和 監聽的dom事件

destroyed(銷毀后)

在實例銷毀之后調用,調用后,所以的事件監聽器會被移出,所有的子實例也會被銷毀,該鈎子在服務器端渲染期間不被調用


父子組件生命周期的執行順序
 結論
 

加載渲染過程
 

->父beforeCreate -> 父created -> 父beforeMount 

->子beforeCreate -> 子created -> 子beforeMount -> 子mounted

-> 父mounted

 

子組件更新過程
 

->父beforeUpdate

-> 子beforeUpdate -> 子updated

-> 父updated

 

父組件更新過程
 

父beforeUpdate -> 父updated

 

銷毀過程
 

-> 父beforeDestroy

-> 子beforeDestroy -> 子destroyed

-> 父destroyed

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM