總結vue框架中的鉤子函數

vue2.x生命周期鉤子函數

組件的生命周期分為3個階段:

  • 掛載階段:beforeCreatecreatedbeforeMountmounted,
  • 更新階段:beforeUpdateupdated,
  • 銷毀階段:beforeDestroydestroyed

beforeCreate


beforeCreate() {// 初始化數據,并通過Object.defineProperty()和給組件實例配置watcher觀察者實例(發布-訂閱者模式),實現數據監測// 該步驟可以用來檢測vue是否開始實例化// data中的數據與el還未初始化,無法通過Vue實例來訪問data中的數據、computed、watch、methods等中的方法。
}

created


created() {// 實例已完成以下配置:數據觀測、屬性和方法的運算,watch/event事件回調,完成了data 數據的初始化,可以訪問data、computed、watch、methods上的方法和數據。但是,未掛載到DOM,不能訪問到el屬性,el屬性,ref屬性內容為空。
}

beforeMount


beforeMount() {//頁面呈現的是未經Vue編譯的DOM結構,所有對DOM的操作,最終都不奏效。
}

mounted


mounted() {//頁面呈現的是經過vue編譯的dom,對dom的操作均有效,至此,初始化階段全部完成,一般在此執行:開啟定時器,發送網絡請求,訂閱消息,綁定自定義事件等初始化操作。
}

beforeUpdate


beforeUpdate() {//當數據發生變化,執行beforeUpdate鉤子函數,此時,內存中數據是新的,但是頁面是舊的,也就是在這個鉤子函數中,頁面和數據不同步
}// beforeUpdate執行結束之后,重新生成一個新的虛擬dom(vnode),用它和原來的Vnode做比較(diff算法)patch指的就是這個比較的過程,更新render函數中的數據,之后之后將render函數渲染成真實dom,完成了 Model --> View 的更新

updated


updated() {// 頁面和數據保持同步
}

beforeDestory


beforeDestroy() {// 在銷毀前,在實例中所有的data,methods,computed,指令等,都處于可用狀態;一般進行:關閉定時器,取消訂閱消息解綁自定義事件等收尾工作。
}

destory


destoryed() {// 當前實例,視圖層和邏輯層的關系解綁// 例如計時器,dom事件監聽器或者與服務器的連接
}

父子組件鉤子函數在三個階段的代碼執行順序


掛載: 父親created > 子created > 子mounted > 父親mounted >
更新: 父親beforeUpdate > 子beforeUpdated > 子updated > 父親updated
銷毀: 父親beforeDestroy > 子beforeDestroy > 子destroyed > 父destroyed

========================================================

keep-alive組件的鉤子函數

deactivated


deactivated() {// 非激活
}

activated


activated() {// 激活 
}
// 保活的頁面希望頁面顯示時立刻刷新頁面的數據  比如購物車
// 保持活動,不會銷毀,而是激活與非激活,點回去就是激活,點走就是非激活

使用場景:

// 1. 用戶在某個列表頁面選擇篩選條件過濾出一份數據列表,由列表頁面進入數據詳情頁面,再返回該列表頁面,我們希望:列表頁面可以保留用戶的篩選(或選中)狀態
// 2. keep-alive就是用來解決這種場景。當然keep-alive不僅僅是能夠保存頁面/組件的狀態這么簡單,它還可以避免組件反復創建和渲染,有效提升系統性能。總的來說,keep-alive用于保存組件的渲染狀態
// 3. 使用keep-alive緩存組件本身是為了提高頁面的性能,快速加載頁面,但有時候在特定場景和條件中,比如在其他的組件對數據庫中的數據發生更改,我們需要去更新當前組件的數據狀態,而因為組件沒有銷毀,所以created和mounted鉤子函數都不執行,deactivated和activated就是用來解決這個問題。

如何使用(觸發)

當組件被keep - alive包裹時, 再次進入此組件, 此時組件是處于存活的情況下;
如果當前組件存在activated() 函數, 一進入組件activated() 立即觸發;
這時我們就可以根據特定的條件去初始化組件數據。 當離開存在deactivated() 函數的組件時, 因為此時組件對象已經處于存活狀態下, 所以一離開組件deactivated() 函數就觸發(也可以根據特定的條件做一些事情)

========================================================

路由中的鉤子函數(6個)

全局路由鉤子函數:beforeEach afterEach

全局前置鉤子beforeEach


// 在每一個路由改變的時候都要執行一遍 
router.beforeEach((to, from, next) => {// to 目標路由對象// from 當前導航正要離開的路由對象// next(Function函數),一定要調用該方法來resolve這個鉤子。調用方法:next(參數或者空) ***必須調用// next(無參數的時候): 進行管道中的下一個鉤子,如果走到最后一個鉤子函數,那么 導航的狀態就是 confirmed (確認的)
})
// 應用場景:
// 1. 進行一些頁面跳轉前的處理,例如跳轉到的頁面需要進行登錄才可以訪問時,就會做登錄的跳轉
// 2. 進入頁面登錄判斷,管理員權限判斷,瀏覽器判斷

全局后置鉤子afterEach


//  afterEach 被調用時,路由已經跳轉完成,所以不需要 next 函數router.afterEach((to,from)=>{})

單個的路由鉤子函數:beforeEnter


// 路由獨享的守衛beforeEnter
// 可以直接在路由配置上直接定義beforeEnter,這些守衛與全局前置守衛的方法參數是一樣的
beforeEnter((to, from, next) => {.....
})

組件內的路由鉤子函數:beforeRouteEnter beforeRouteLeave beforeRouteUpdate

  • 使用場景:
    • 消除組件中的定時器
    • 當頁面有未關閉的窗口,或未保存的內容時,阻止頁面跳轉
    • 保存相關內到Vuex和Session中

beforeRouteEnter


beforeRouteEnter(to, from, next) {// 在渲染該組件的對應路由被confirm前調用// 不能獲取組件實例 this// 因為當鉤子執行時,組件實例還沒有被創建
}

beforeRouteUpdate


beforeRouteUpdate(to, from, next) {// 在當前路由改變,但是組件被復用時調用// 舉例來說,對于一個帶有動態參數的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉的時候。// 由于會渲染同樣的Foo組件,因此組件實例會被復用。而這個鉤子就會在這個情況下被調用。// 可以訪問組件實例 this}

beforeRouteLeave


beforeRouteLeave(to, from, next) {// 導航離開該組件的對應路由時調用// 可以訪問組件實例 this
}

========================================================

組件自定義指令中的鉤子函數direction(v2.x)

  • 對普通dom元素進行底層操作 Vue.directive('指令名稱', {})

  • bind: 指令被綁到元素上的時候使用, 只會執行一次

    Vue.directive('color', {bind: function(el) { //el就是被綁定的元素el.style.color = "red"}})
  • inserted: 綁定指令的元素被添加到父元素上的時候使用, 只會執行一次

    Vue.directive('focus', {inserted: function(el) {el.focus()}})
  • update: 所在組建的VNode更新時調用, 但是可能發生在其子VNode更新之前, 也就是說元素更新, 但子元素尚未更新, 將調用此鉤子(自定義指令所在組件更新時執行, 但是不保證更新完成)— > 和自定義所在組件有關

    Vue.directive('color', {update: function(el) {el.style.color = "blue"}})
  • componentUpdated: 組件和子級更新后執行(自定義指令所在組件更新完成, 且子組件也完成更新).

        Vue.directive('color', {componentUpdated: function(el) {el.style.color = "yellow"}})
    
  • unbind: 解綁(銷毀) 自定義指令所在的dom銷毀時執行, 只調用一次.

========================================================

組件自定義指令中的鉤子函數direction(v3.x)

  • created - 自定義指令所在組件, 創建后
  • beforeMount - 就是Vue2.x中的 bind, 自定義指令綁定到 DOM 后調用.只調用一次, 注意: 只是加入進了DOM, 但是渲染沒有完成
  • mounted - 就是Vue2.x中的 inserted, 自定義指令所在DOM, 插入到父 DOM 后調用, 渲染已完成(最最重要)
  • beforeUpdate - 自定義指令所在 DOM, 更新之前調用
  • updated - 就是Vue2.x中的 componentUpdated
  • beforeUnmount - 銷毀前
  • unmounted - 銷毀后

========================================================

vue3.x生命周期鉤子函數 (函數式開發)


import {defineComponent,ref,toRefs,watch,computed,onUpdated....} from 'vue'
//setup函數替代了vuejs.2.x的beforeCreate和created鉤子函數
1. onBeforeMount
onBeforeMount(()=>{// 在組件被掛載之前被調用,當這個鉤子被調用時,組件已經完成其響應式狀態的設置,但還沒有創建DOM節點,即將首次執行DOM渲染過程。})  

onMounted


onMounted(()=>{// 在組件被掛載之前被調用,當這個鉤子被調用時,組件已經完成其響應式狀態的設置,但還沒有創建DOM節點,即將首次執行DOM渲染過程。})

onBeforeUpdate


onBeforeUpdate(()=>{//在組件即將因為響應式狀態變更而更新其DOM樹之前調用,在beforeUpdate鉤子函數執行時,組件的DOM還未更新,如果你想在組件更新前訪問DOM,比如手動移除已添加的事件監聽器,你可以注冊這個鉤子函數
})

onUpdated


onUpdated(()=>{//在組件因為響應式狀態變更而更新其DOM樹之后調用,父組件的更新鉤子將在其子組件的更新鉤子之后使用。 某些邏輯,最好不要使用updated鉤子函數而用計算屬性或watcher取而代之,因為任何數據的變化導致的組件更新都會執行updated鉤子函數。注意:不要在updated鉤子函數中更新數據,因為這樣會再次觸發組件更新,導致無限遞歸更新。父組件的更新不一定會導致子組件的更新,因為更新粒度是組件級別的。
})

onBeforeUnmount


onBeforeUnmount(()=>{// 在組件實例被卸載之前調用,當這個鉤子被調用時,組件實列依然還保留全部的功能
})

onUnmount


onUnmounted(()=>{// 在組件實列被卸載之后調用,其所有子組件都已經被卸載。可以在這個鉤子中手動清理一些副作用,例如計時器,dom事件監聽器或者與服務器的連接
})

onErrorCapture


onErrorCaptured(()=>{// 注冊一個鉤子,在捕獲了后代組件傳遞的錯誤時調用。
}) 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161657.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于蛇優化算法優化概率神經網絡PNN的分類預測 - 附代碼

基于蛇優化算法優化概率神經網絡PNN的分類預測 - 附代碼 文章目錄 基于蛇優化算法優化概率神經網絡PNN的分類預測 - 附代碼1.PNN網絡概述2.變壓器故障診街系統相關背景2.1 模型建立 3.基于蛇優化優化的PNN網絡5.測試結果6.參考文獻7.Matlab代碼 摘要:針對PNN神經網絡…

大數據預處理技術

文章目錄 前言 大數據技術成為前沿專業 也是現在甚至未來的朝陽產業,大數據有分別是 數據預處理 數據存儲 大數據處理和分析 數據可視化 部分組成 ,大數據行業有數據則稱王,大數據的核心是數據本身 怎么獲取有價值的數據呢?本章講…

android 9 adb安裝過程學習(二)

一、PackageInstalllerService流程分析 下面來分析下 PackageInstallerService 中的邏輯,我們先來看看 PackageInstallerService 的創建,當然,這部分的邏輯是在開機的時候,這里我們再回顧下: 位置:./frame…

Cent OS 8.2 安裝 自定義硬盤 固定IP VMware

時間:20231122 環境:win11 、VMware 16 pro、Cent OS 8.2 說明:自定義安裝方法、自定義硬盤分區、固定IP且能聯網 1、使用自定義的方式安裝虛擬機 此處選擇典型,則會自動安裝系統,無法自定義硬件以及配置信息 選擇…

CCF CSP認證 歷年題目自練Day49

題目一 此題用暴力枚舉做過(80分)現如今終于用二維前綴和做到滿分。 試題編號: 202309-2 試題名稱: 坐標變換(其二) 時間限制: 2.0s 內存限制: 512.0MB 問題描述: 問題…

【Axure視頻教程】中繼器首行函數

今天教大家在Axure里如何使用中繼器首行函數,本視頻教程會先從中繼器首行函數的基礎講起,然后通過計算合計數、統計選中數、兩個中繼器選項聯動這3個案例更加深入的講解這這個函數的應用。注:該教程主要講解中繼器首行函數的用法,…

NFC:應用場景廣泛的短距離通信技術

NFC:應用場景廣泛的短距離通信技術 一、NFC 技術介紹1.1 NFC 技術應用場景1.2 NFC 技術優點1.3 NFC 工作原理 二、NFC 開發2.1 NFC 應用開發流程2.2 NFC 讀取和寫入2.3 NFC 讀寫功能示例 三、總結 一、NFC 技術介紹 NFC (Near-field communication&…

SM系列國密算法

一、概述 國產密碼算法(國密算法)是指國家密碼局認定的國產商用密碼算法,國密算法是提升國家密碼安全和數據安全的關鍵技術。 為了保障商用密碼的安全性,國家密碼局制定了一系列密碼標準,包括:SM1、SM2、S…

分類預測 | Matlab實現基于PSO-PNN粒子群算法優化概率神經網絡的數據分類預測

分類預測 | Matlab實現基于PSO-PNN粒子群算法優化概率神經網絡的數據分類預測 目錄 分類預測 | Matlab實現基于PSO-PNN粒子群算法優化概率神經網絡的數據分類預測分類效果基本描述程序設計參考資料 分類效果 基本描述 1.Matlab實現基于PSO-PNN粒子群算法優化概率神經網絡的數據…

hadoop在本地創建文件,然后將文件拷貝/上傳到HDFS

1.要$cd {對應目錄}進入到對應目錄,一般為 cd /usr/local/hadoop/ 2.創建文件,$sudo gedit {文件名},例 sudo gedit test.txt 然后在彈出的txt文件輸入內容,點擊右上角的保存之后,關閉即可。 3.拷貝本地文件到HDF…

RPG項目_UI登錄

首先創建一個項目 將資源包導進Resources文件夾 創建一個Scripts腳本文件夾 然后再對Scripts腳本文件夾分門別類 導入UI資源包 創建一個Image 按住Alt 選擇右下角 image就會覆蓋整個面板 修改image名字為BG 將image圖片放置背景欄 再創建一個image 改名為MainMenu 修改MainMenu…

屏幕坐標轉換場景坐標并進行物體檢測

在 OpenSceneGraph 中,要將屏幕坐標轉換為當前場景坐標,并過濾出屏幕顯示范圍內的節點,可以通過以下步驟實現: 獲取屏幕坐標: 當用戶點擊或交互時,獲取鼠標點擊的屏幕坐標。 轉換屏幕坐標為世界坐標&#…

Linux上通過SSL/TLS和start tls連接到LDAP服務器

一,大致流程。 1.首先在Linux上搭建一個LDAP服務器 2.在LDAP服務器上安裝CA證書,服務器證書,因為SSL/TLS,start tls都屬于機密通信,需要客戶端和服務器都存在一個相同的證書認證雙方的身份。3.安裝phpldapadmin工具&am…

一點DETR學習

DETR: 主要是為了學習query。 主要從兩個方面:加偏好和縮短序列長度

〖大前端 - 基礎入門三大核心之JS篇?〗- DOM事件傳播和事件監聽方法addEventListener()

說明:該文屬于 大前端全棧架構白寶書專欄,目前階段免費,如需要項目實戰或者是體系化資源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作經驗, 從事過全棧研發、產品經理等工作&#xf…

ABAP調用Https接口 Ssl證書導入

ABAP調用Https接口 Ssl證書導入 一、證書導入 谷歌瀏覽器打開對方系統URL地址,下載SSL Server certificate,步驟如下: 瀏覽器打開要導出certificate(證書)的網站,點擊這個小鎖的圖標: 點擊連接是安全的后面小播放按鈕 點擊證…

Spark RDD、DataFrame和Dataset的區別和聯系

一、三種數據介紹 是Spark中的三種不同的數據結構,它們都可以用于分布式數據處理,但是它們的實現方式和使用方法略有不同。 RDD(彈性分布式數據集) RDD是Spark最初的核心數據結構,它是一個分布式的、只讀的、可容錯的…

BIND DNS服務器的域名日志

BIND DNS服務器的域名日志 解析字段包括以下幾個部分: 日期和時間:記錄查詢發生的日期和時間。客戶端IP地址:發起查詢的客戶端IP地址。查詢類型:查詢的記錄類型,如A、AAAA、MX、NS等。查詢域名:被查詢的域…

系列七、ThreadLocal為什么會導致內存泄漏

一、ThreadLocal為什么會導致內存泄露 1.1、ThreadLocalMap的基本結構 ThreadLocalMap是ThreadLocal的內部類,沒有實現Map接口,用獨立的方式實現了Map的功能,其內部的Entry也是獨立實現的。源碼如下: 1.2、ThreadLocal引用示意圖…

educoder中Hive -- 索引和動態分區調整

第1關:Hive -- 索引 ---創建mydb數據庫 create database if not exists mydb; ---使用mydb數據庫 use mydb; ---------- Begin ---------- ---創建staff表 create table staff( id int, name string, sex string) row format delimited fields terminated by , stored…