Vue Hook Event 深度解讀
前言
Hook Event (鉤子事件)相信很多 Vue 開發(fā)者都沒有使用過,甚至沒聽過,畢竟 Vue 官方文檔中也沒有提及。
Vue 提供了一些生命周期鉤子函數(shù),供開發(fā)者在特定的邏輯點添加額外的處理邏輯,比如: 在組件掛載階段提供了beforeMount 和 mounted 兩個生命周期鉤子,供開發(fā)者在組件掛階段執(zhí)行額外的邏處理,比如為組件準(zhǔn)備渲染所需的數(shù)據(jù)。
那這個Hook Event——鉤子事件,其中也有鉤子的意思,和 Vue 的生命周期鉤子函數(shù)有什么關(guān)系呢? 它又有什么用呢?這就是這邊文章要解答的問題。
什么是 Hook Event ?Hook Event是 Vue 的自定義事件結(jié)合生命周期鉤子實現(xiàn)的一種從組件外部為組件注入額外生命周期方法的功能。
如下圖所示,如果引入第三方業(yè)務(wù)組件,組件內(nèi)部請求數(shù)據(jù),沒有l(wèi)oding,如果修改源碼的話會很麻煩,現(xiàn)在用hook可以解決。
通過 hook event 在組件外部為組件注入額外的生命周期鉤子邏輯:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <comp @hook:mounted="handleHookEvent"></comp> </div> <script src="./vue.js"></script> <script> // 第三方業(yè)務(wù)組件 Vue.component("comp",{ template:` <ul> <li v-for="item in arr" :key="JSON.stringify(item)">{{ item }}</li> </ul> `, data(){ return { arr:[] } }, async mounted(){ console.log("comp mounted"); // 通過 hook event 在組件外部為組件注入額外的生命周期鉤子邏輯 // 通過Promise + setTimeout 延時程序,模擬接口調(diào)用的過程 this.arr = await new Promise(resolve=>{ setTimeout(()=>{ resolve([1,2,3,4,5]) },2000) }) } }) new Vue({ el:"#app", methods:{ handleHookEvent() { console.log('loding...'); } } }) </script> </body> </html>
Hook Event 有什么作用?通過 Hook Event 可以從組件外部為組件注入額外的生命周期方法。
總結(jié)面試官 問: 什么是 Hook Event?
答:
Hook Event是 Vue 的自定義事件結(jié)合生命周期鉤子實現(xiàn)的一種從組件外部為組件注入額外生命周期方法的功能。.面試官 問: Hook Event 是如果實現(xiàn)的?
答:
<comp @hook:lifecycleMethod="method" />
處理組件自定義事件的時候 (vm.$on)如果發(fā)現(xiàn)組件有 hook:xx 格式的事件(xx為 Vue 的生命周期函數(shù)),測將 vm._hasHookEvent 置為 true ,表示該組件有 Hook Event
在組件生命周期方法被觸發(fā)的時候,內(nèi)部會通過 calLHook 方法來執(zhí)行這些生命周期函數(shù),在生命周期函數(shù)執(zhí)行之后,如果發(fā)現(xiàn) vm._hasHookEvent 為 true,則表示當(dāng)前組件有 Hook Event,通過vm.$emit('hook:xx') 觸發(fā) Hook Event 的執(zhí)行
這就是 Hook Event 的實現(xiàn)原理。
到此這篇關(guān)于Vue Hook Event 解讀的文章就介紹到這了,更多相關(guān)Vue Hook Event 解讀內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue+element-ui+ajax實現(xiàn)一個表格的實例
下面小編就為大家分享一篇vue+element-ui+ajax實現(xiàn)一個表格的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03Vue3?企業(yè)級組件庫框架搭建?pnpm?monorepo實戰(zhàn)示例
這篇文章主要為大家介紹了Vue3?企業(yè)級組件庫框架搭建?pnpm?monorepo實戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Electron+vue從零開始打造一個本地播放器的方法示例
這篇文章主要介紹了Electron+vue從零開始打造一個本地播放器的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10vue3+vite使用History路由模式打包部署項目的步驟及注意事項
這篇文章主要介紹了vue3+vite使用History路由模式打包部署項目的步驟及注意事項,配置過程包括在Vue項目中設(shè)置路由模式、調(diào)整打包配置以及Nginx服務(wù)器的配置,正確的部署配置能夠確保應(yīng)用順利運行,提升用戶體驗,需要的朋友可以參考下2024-10-10vue項目base64字符串轉(zhuǎn)圖片的實現(xiàn)代碼
這篇文章主要介紹了vue項目base64字符串轉(zhuǎn)圖片的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07啟動myvue報錯npm?ERR!?code?ENOENT?npm?ERR!?syscall?open的解
這篇文章主要介紹了啟動myvue報錯npm?ERR!?code?ENOENT?npm?ERR!?syscall?open的解決辦法,文中給出了詳細(xì)的解決方法,并通過圖文結(jié)合的方式介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03Vue.js實戰(zhàn)之使用Vuex + axios發(fā)送請求詳解
這篇文章主要給大家介紹了關(guān)于Vue.js使用Vuex與axios發(fā)送請求的相關(guān)資料,文中介紹的非常詳細(xì),相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04