欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3官方Hooks的用法與實(shí)現(xiàn)原理

 更新時(shí)間:2025年05月28日 08:26:59   作者:黑匣子~  
Vue 3 引入了 Composition API,使得生命周期鉤子(hooks)在函數(shù)式風(fēng)格中更清晰地表達(dá),下面就來介紹一下Vue3官方Hooks的用法與實(shí)現(xiàn)原理,感興趣的可以了解一下

Vue 3 引入了 Composition API,使得生命周期鉤子(hooks)在函數(shù)式風(fēng)格中更清晰地表達(dá)。本篇文章將從官方 hooks 的使用、實(shí)現(xiàn)原理以及自定義 hooks 的結(jié)構(gòu)化思路出發(fā),全面理解 Vue 3 的 hooks 系統(tǒng)。

?? 1. Vue 3 官方生命周期 hooks 一覽

Hook 函數(shù)觸發(fā)時(shí)機(jī)
onBeforeMount組件掛載前
onMounted組件掛載后
onBeforeUpdate數(shù)據(jù)變更、視圖更新前
onUpdated數(shù)據(jù)變更、視圖更新后
onBeforeUnmount卸載前
onUnmounted卸載后
onActivated<KeepAlive> 激活時(shí)
onDeactivated<KeepAlive> 失活時(shí)
onErrorCaptured錯(cuò)誤捕獲
onRenderTracked響應(yīng)式依賴追蹤
onRenderTriggered響應(yīng)式依賴觸發(fā)更新

? 2. 使用示例

&lt;script setup&gt;
import { onMounted } from 'vue'

onMounted(() =&gt; {
  console.log('組件已掛載完成')
})
&lt;/script&gt;

在 <script setup> 中調(diào)用 hooks 更簡潔,無需訪問 setup() 返回對(duì)象。

?? 3. 實(shí)現(xiàn)原理解析

生命周期 hooks 的注冊(cè)基于當(dāng)前組件實(shí)例 currentInstance

export function onMounted(hook: Function, target = currentInstance) {
  return injectHook('mounted', hook, target)
}

核心函數(shù) injectHook

function injectHook(type: LifecycleHooks, hook: Function, target) {
  const hooks = target[type] || (target[type] = [])
  hooks.push(hook)
}

當(dāng)組件進(jìn)入對(duì)應(yīng)生命周期階段時(shí),Vue 內(nèi)部會(huì)遍歷執(zhí)行掛載在實(shí)例上的所有該類型 hook。

?? 4. 自定義 Hooks(組合邏輯復(fù)用)

Vue 3 鼓勵(lì)將邏輯拆分為 useXxx 函數(shù),以便跨組件復(fù)用。

?? 示例:useWindowSize

// useWindowSize.ts
import { ref, onMounted, onUnmounted } from 'vue'

export function useWindowSize() {
  const width = ref(window.innerWidth)
  const height = ref(window.innerHeight)

  const update = () => {
    width.value = window.innerWidth
    height.value = window.innerHeight
  }

  onMounted(() => window.addEventListener('resize', update))
  onUnmounted(() => window.removeEventListener('resize', update))

  return { width, height }
}

使用方式:

<script setup>
import { useWindowSize } from '@/hooks/useWindowSize'

const { width, height } = useWindowSize()
</script>

?? 自定義 hooks 的原理

  • 本質(zhì)是普通函數(shù),內(nèi)部調(diào)用 Vue 組合式 API(如 refwatchonMounted
  • 在組件 setup() 時(shí)執(zhí)行,響應(yīng)式變量掛接到當(dāng)前組件上下文
  • 內(nèi)部調(diào)用生命周期鉤子時(shí)會(huì)依賴當(dāng)前的 getCurrentInstance()

?? 5. 總結(jié)對(duì)比

類型示例作用特點(diǎn)
官方生命周期 HookonMounted()注冊(cè)生命周期回調(diào)由 Vue 內(nèi)部調(diào)度
自定義 HookuseMousePosition()封裝響應(yīng)式狀態(tài) + 邏輯復(fù)用是普通函數(shù),可組合嵌套

?? 推薦閱讀

?? 結(jié)語

生命周期 hooks 是 Vue 3 中非常核心的機(jī)制之一。理解它們的用法與實(shí)現(xiàn),有助于我們編寫結(jié)構(gòu)清晰、邏輯可復(fù)用的組件。

如果你對(duì) Vue 源碼感興趣,不妨進(jìn)一步探索 Vue 是如何依賴 currentInstance 來處理作用域鉤子的注冊(cè)和調(diào)用的。

到此這篇關(guān)于Vue3官方Hooks的用法與實(shí)現(xiàn)原理的文章就介紹到這了,更多相關(guān)Vue3 Hooks用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue命令式組件的編寫與應(yīng)用小結(jié)

    Vue命令式組件的編寫與應(yīng)用小結(jié)

    這篇文章主要介紹了Vue命令式組件的編寫與應(yīng)用小結(jié),在這篇文章中,我會(huì)帶你了解命令式組件的基本概念,并通過一些簡單的示例來展示它們是如何工作的,需要的朋友可以參考下
    2024-03-03
  • vue3+ts使用Echarts的實(shí)例詳解

    vue3+ts使用Echarts的實(shí)例詳解

    這篇文章主要介紹了vue3+ts使用Echarts的實(shí)例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • el-table?樹形數(shù)據(jù)?tree-props?多層級(jí)使用避坑

    el-table?樹形數(shù)據(jù)?tree-props?多層級(jí)使用避坑

    本文主要介紹了el-table?樹形數(shù)據(jù)?tree-props?多層級(jí)使用避坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • vue實(shí)現(xiàn)購物車選擇功能

    vue實(shí)現(xiàn)購物車選擇功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)購物車選擇功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • vue實(shí)現(xiàn)滾動(dòng)底部加載下一頁指令的示例代碼

    vue實(shí)現(xiàn)滾動(dòng)底部加載下一頁指令的示例代碼

    vue中監(jiān)控滾動(dòng)事件可以直接在mounted中綁定滾動(dòng)事件,然后在銷毀前解綁滾動(dòng)事件,本文通過實(shí)例代碼介紹vue實(shí)現(xiàn)滾動(dòng)底部加載下一頁指令的過程,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • vue項(xiàng)目npm install失敗的問題解決方案

    vue項(xiàng)目npm install失敗的問題解決方案

    本文主要介紹了vue項(xiàng)目npm install失敗的問題解決方案,文中通過圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Vue3全局組件注冊(cè)的實(shí)現(xiàn)代碼

    Vue3全局組件注冊(cè)的實(shí)現(xiàn)代碼

    在這篇文章中,我們將學(xué)習(xí)一下 Vue3 的全局組件注冊(cè)是如何實(shí)現(xiàn)的,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • 關(guān)于vue?src路徑動(dòng)態(tài)拼接的小知識(shí)

    關(guān)于vue?src路徑動(dòng)態(tài)拼接的小知識(shí)

    這篇文章主要介紹了vue?src路徑動(dòng)態(tài)拼接的小知識(shí),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-04-04
  • vue3中關(guān)于路由hash與History的設(shè)置

    vue3中關(guān)于路由hash與History的設(shè)置

    這篇文章主要介紹了vue3中關(guān)于路由hash與History的設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue實(shí)現(xiàn)echarts餅圖/柱狀圖點(diǎn)擊事件實(shí)例

    vue實(shí)現(xiàn)echarts餅圖/柱狀圖點(diǎn)擊事件實(shí)例

    echarts原生提供了相應(yīng)的API,只需要在配置好echarts之后綁定相應(yīng)的事件即可,下面這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)echarts餅圖/柱狀圖點(diǎn)擊事件的相關(guān)資料,需要的朋友可以參考下
    2023-06-06

最新評(píng)論