Vue实例中生命周期created和mounted的区别(具体细节分析)。
最近剛好在學習Vue.js,在實敲輪播demo時發現了一個當時感覺很奇怪的問題:
初始化使用mounted鉤子時,只調用了一次,之后就沒有調用過了。害我一直以為是自己之后的代碼書寫有問題,結果自己再敲一遍還是只能初始化調用一次。。。發現這個問題后找找大神們的博客看了看,發現了created鉤子的使用。下面就將這次的經歷給記錄下來。
生命周期先上圖
這里寫圖片描述
什么是生命周期
Vue實例有一個完整的生命周期,也就是從開始創建、初始化數據、編譯模板、掛載Dom、渲染→更新→渲染、卸載等一系列過程,我們稱這是Vue的生命周期。通俗說就是Vue實例從創建到銷毀的過程,就是生命周期。
在Vue的整個生命周期中,它提供了一系列的事件,可以讓我們在事件觸發時注冊js方法,可以讓我們用自己注冊的js方法控制整個大局,在這些事件響應方法中的this直接指向的是vue的實例。
再上圖,對生命周期圖的標注
這里寫圖片描述
我們從圖中看兩個節點:
created:在模板渲染成html前調用,即通常初始化某些屬性值,然后再渲染成視圖。
mounted:在模板渲染成html后調用,通常是初始化頁面完成后,再對html的dom節點進行一些需要的操作。
其實兩者比較好理解,通常created使用的次數多,而mounted通常是在一些插件的使用或者組件的使用中進行操作,比如插件chart.js的使用: var ctx = document.getElementById(ID);通常會有這一步,而如果你寫入組件中,你會發現在created中無法對chart進行一些初始化配置,一定要等這個html渲染完后才可以進行,那么mounted就是不二之選。下面看一個例子(用組件)。
例子
view plain copy
可以看到輸出如下:
可以看到都在created賦予初始值的情況下成功渲染出來了。
但是同時看console臺如下:
可以看到第一個報了錯,實際是因為找不到id,getElementById(ID) 并沒有找到元素,原因如下:
在created的時候,視圖中的html并沒有渲染出來,所以此時如果直接去操作html的dom節點,一定找不到相關的元素
而在mounted中,由于此時html已經渲染出來了,所以可以直接操作dom節點,故輸出了結果“唐浩益”。
以上就是我自己總結的mounted和mounted的區別,寫的比較簡陋,記錄下來,加深印象。
特別值得注意的是created鉤子函數和mounted鉤子函數的區別
每個鉤子函數都在啥時間觸發
beforeCreate
在實例初始化之后,數據觀測(data observer) 和 event/watcher 事件配置之前被調用。
created
實例已經創建完成之后被調用。在這一步,實例已完成以下的配置:數據觀測(data observer),屬性和方法的運算, watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。
beforeMount
在掛載開始之前被調用:相關的 render 函數首次被調用。
mounted
el 被新創建的 vm.$el 替換,并掛載到實例上去之后調用該鉤子。
beforeUpdate
數據更新時調用,發生在虛擬 DOM 重新渲染和打補丁之前。 你可以在這個鉤子中進一步地更改狀態,這不會觸發附加的重渲染過程。
updated
由于數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之后會調用該鉤子。
當這個鉤子被調用時,組件 DOM 已經更新,所以你現在可以執行依賴于 DOM 的操作。然而在大多數情況下,你應該避免在此期間更改狀態,因為這可能會導致更新無限循環。
該鉤子在服務器端渲染期間不被調用。
beforeDestroy
實例銷毀之前調用。在這一步,實例仍然完全可用。
destroyed
Vue 實例銷毀后調用。調用后,Vue 實例指示的所有東西都會解綁定,所有的事件監聽器會被移除,所有的子實例也會被銷毀。 該鉤子在服務器端渲染期間不被調用。
- 總之呢,個人感覺初步感覺就是:created鉤子每次加載完成后都可以重復執行;而mounted鉤子只在頁面第一次加載后才調用出來,只要el被加載過,之后的重復加載該頁面就不會調用該鉤子了
原文鏈接:https://blog.csdn.net/m0_37852904/article/details/78716409
總結
以上是生活随笔為你收集整理的Vue实例中生命周期created和mounted的区别(具体细节分析)。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux批量修改文件名
- 下一篇: Python学习 Day29 正则表达式