vue-生命週期

 vue實例的生命週期

所有的生命週期鉤子自動綁定 this 上下文到實例中,因此你可以訪問數據,對屬性和方法進行運算。這意味着你不能使用箭頭函數來定義一個生命週期方法 (例如 created: () => this.fetchTodos())。這是因爲箭頭函數綁定了父上下文,因此 this與你期待的 Vue 實例不同,this.fetchTodos 的行爲未定義。 

beforeCreate

  • 類型Function

  • 詳細

    在實例初始化之後,數據觀測 (data observer) 和 event/watcher 事件配置之前被調用。

created

  • 類型Function

  • 詳細

    在實例創建完成後被立即調用。在這一步,實例已完成以下的配置:數據觀測 (data observer),屬性和方法的運算,watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。

beforeMount

  • 類型Function

  • 詳細

    在掛載開始之前被調用:相關的 render 函數首次被調用。

mounted

  • 類型Function

  • 詳細

el 被新創建的 vm.$el 替換,並掛載到實例上去之後調用該鉤子。如果 root 實例掛載了一個文檔內元素,當 mounted 被調用時 vm.$el 也在文檔內。

注意 mounted 不會承諾所有的子組件也都一起被掛載。如果你希望等到整個視圖都渲染完畢,可以用 vm.$nextTick 替換掉 mounted

mounted: function () {
  this.$nextTick(function () {
    // Code that will run only after the
    // entire view has been rendered
  })
}

beforecreated:el 和 data 並未初始化
created:完成了 data 數據的初始化,el沒有
beforeMount:完成了 el 和 data 初始化
mounted :完成掛載

beforeUpdate

  • 類型Function

  • 詳細

    數據更新時調用,發生在虛擬 DOM 打補丁之前。這裏適合在更新之前訪問現有的 DOM,比如手動移除已添加的事件監聽器。

    該鉤子在服務器端渲染期間不被調用,因爲只有初次渲染會在服務端進行。

updated

  • 類型Function

  • 詳細

    由於數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之後會調用該鉤子。

    當這個鉤子被調用時,組件 DOM 已經更新,所以你現在可以執行依賴於 DOM 的操作。然而在大多數情況下,你應該避免在此期間更改狀態。如果要相應狀態改變,通常最好使用計算屬性或 watcher 取而代之。

    注意 updated 不會承諾所有的子組件也都一起被重繪。如果你希望等到整個視圖都重繪完畢,可以用 vm.$nextTick 替換掉 updated

    updated: function () {
      this.$nextTick(function () {
        // Code that will run only after the
        // entire view has been re-rendered
      })
    }

     注意beforeUpdate是指view層的數據變化前,不是data中的數據改變前觸發。因爲Vue是數據驅動的。

activated

deactivated

beforeDestroy

  • 類型Function

  • 詳細

    實例銷燬之前調用。在這一步,實例仍然完全可用。

destroyed

  • 類型Function

  • 詳細

    Vue 實例銷燬後調用。調用後,Vue 實例指示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子實例也會被銷燬。

errorCaptured

  • 類型(err: Error, vm: Component, info: string) => ?boolean

  • 詳細

    當捕獲一個來自子孫組件的錯誤時被調用。此鉤子會收到三個參數:錯誤對象、發生錯誤的組件實例以及一個包含錯誤來源信息的字符串。此鉤子可以返回 false 以阻止該錯誤繼續向上傳播。

    你可以在此鉤子中修改組件的狀態。因此在模板或渲染函數中設置其它內容的短路條件非常重要,它可以防止當一個錯誤被捕獲時該組件進入一個無限的渲染循環。

    錯誤傳播規則

    • 默認情況下,如果全局的 config.errorHandler 被定義,所有的錯誤仍會發送它,因此這些錯誤仍然會向單一的分析服務的地方進行彙報。

    • 如果一個組件的繼承或父級從屬鏈路中存在多個 errorCaptured 鉤子,則它們將會被相同的錯誤逐個喚起。

    • 如果此 errorCaptured 鉤子自身拋出了一個錯誤,則這個新錯誤和原本被捕獲的錯誤都會發送給全局的 config.errorHandler

    • 一個 errorCaptured 鉤子能夠返回 false 以阻止錯誤繼續向上傳播。本質上是說“這個錯誤已經被搞定了且應該被忽略”。它會阻止其它任何會被這個錯誤喚起的 errorCaptured 鉤子和全局的 config.errorHandler

總結:

beforecreate : 舉個例子:可以在這加個loading事件
created :在這結束loading,還做一些初始化,實現函數自執行
mounted: 在這發起後端請求,拿回數據,配合路由鉤子做一些事情
beforeDestory: 你確認刪除XX嗎? destoryed :當前組件已被刪除,清空相關內容

參考鏈接:https://www.cnblogs.com/thinheader/p/9462125.html

vue父子組件生命週期中的鉤子函數的執行順序

  • 加載渲染過程

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

  • 子組件更新過程

  父beforeUpdate->子beforeUpdate->子updated->父updated

  • 父組件更新過程

  父beforeUpdate->父updated

  • 銷燬過程

  父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

發佈了65 篇原創文章 · 獲贊 85 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章