因爲工做中常用
chrome
調試工具來定位問題,覺着這東西真的挺好用。忽然有一天受到啓發,想着:「我學習源碼是否也能夠經過調試工具呢?」 所以,誕生了這篇文章來記錄個人一些學習成果,後續應該會寫成一個系列。javascript
這裏列舉一些閱讀源碼的一些常見方式:java
github
上查看某一個版本的源碼,針對某些功能的實現進行剖析commit
開始看上面是我所知的一些閱讀源碼的常見方式,可是以上兩種方式,不管是哪種,都須要對flow
稍微熟悉一些,否則看着多彆扭(固然啦,若是你直接下載源碼到本地轉碼之後慢慢看,那隻能當我沒說);同時,從第一個commit
開始看的話未免太消磨時間,相信在座的各位都不是很願意。git
那使用chrome
調試工具看源碼都有啥優勢呢?github
chrome
調試工具裏的代碼都是通過轉碼的,閱讀成本相對較低提及Vue
,首先必不可少的就是講Vue
的生命週期了,不只是面試的時候常常會被問到這個問題,開發的時候也常常會在生命週期這裏遇到一些坑面試
Vue 中常見的生命週期及對應順序: beforeCreate —> created —> beforeMount —> mounted —> beforeDestroy —> destroyed,官網有張則很清晰的描繪了這個過程:
chrome
接下來讓咱們在上面對應的鉤子函數裏打下一個斷點
瀏覽器
原來,兩次beforeCreate
鉤子函數分別是Vue
自己和VueRouter
執行的(終於破案了...)函數
除了這幾個鉤子函數之外,還有beforeDestroy
跟destroyed
這兩個鉤子,顧名思義,應該是頁面銷燬的時候纔會執行,因此咱們在上面打了斷點進去也沒有看到這兩個鉤子觸發了。
另外還有beforeUpdate
跟updated
兩個鉤子,字面意思就是「更新前」與「更新後」嘛。一樣,上面的斷點也沒有在這裏停下來。爲了驗證它們之間的執行順序,我在這個項目裏面加了幾句代碼:工具
data () {
return {
lists: [ 1, 2, 3, 4 ]
}
},
methods: {
handleClick () {
let len = this.lists.length
this.lists.push(this.lists[len - 1] + 1)
}
}
複製代碼
而後刷新頁面,點擊這個按鈕能夠看到執行了beforeUpdate
鉤子,放開這個斷點之後,頁面數據刷新,斷點停在了updated
這個鉤子函數中。學習
最後,咱們回過頭來再看這張圖片,是否是對整個生命週期的流程清晰多了呢?