最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

Hook 函數(shù)觸發(fā)時機
onBeforeMount組件掛載前
onMounted組件掛載后
onBeforeUpdate數(shù)據(jù)變更、視圖更新前
onUpdated數(shù)據(jù)變更、視圖更新后
onBeforeUnmount卸載前
onUnmounted卸載后
onActivated<KeepAlive> 激活時
onDeactivated<KeepAlive> 失活時
onErrorCaptured錯誤捕獲
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() 返回對象。

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

生命周期 hooks 的注冊基于當(dāng)前組件實例 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)入對應(yīng)生命周期階段時,Vue 內(nèi)部會遍歷執(zhí)行掛載在實例上的所有該類型 hook。

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

Vue 3 鼓勵將邏輯拆分為 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() 時執(zhí)行,響應(yīng)式變量掛接到當(dāng)前組件上下文
  • 內(nèi)部調(diào)用生命周期鉤子時會依賴當(dāng)前的 getCurrentInstance()

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

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

?? 推薦閱讀

?? 結(jié)語

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

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

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

相關(guān)文章

  • 15 分鐘掌握vue-next函數(shù)式api(小結(jié))

    15 分鐘掌握vue-next函數(shù)式api(小結(jié))

    這篇文章主要介紹了15 分鐘掌握vue-next函數(shù)式api(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • vue-cli5搭建vue項目的實現(xiàn)步驟

    vue-cli5搭建vue項目的實現(xiàn)步驟

    本文主要介紹了vue-cli5搭建vue項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Vue.js實現(xiàn)一個漂亮、靈活、可復(fù)用的提示組件示例

    Vue.js實現(xiàn)一個漂亮、靈活、可復(fù)用的提示組件示例

    這篇文章主要介紹了Vue.js實現(xiàn)一個漂亮、靈活、可復(fù)用的提示組件示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • vue項目使用cdn加速減少webpack打包體積

    vue項目使用cdn加速減少webpack打包體積

    通過壓縮代碼的手段可減小網(wǎng)絡(luò)傳輸?shù)拇笮?但實際上最影響用戶體驗的還是網(wǎng)頁首次打開時的加載等待,其根本原因是網(wǎng)絡(luò)傳輸過程耗時較大,這篇文章主要給大家介紹了關(guān)于vue項目使用cdn加速減少webpack打包體積的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Vite內(nèi)網(wǎng)ip訪問2種配置方式

    Vite內(nèi)網(wǎng)ip訪問2種配置方式

    這篇文章主要給大家介紹了關(guān)于Vite內(nèi)網(wǎng)ip訪問的2種配置方式,文中通過實例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Vite具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-07-07
  • Vue2+Element-ui實現(xiàn)el-table表格自適應(yīng)高度的案例

    Vue2+Element-ui實現(xiàn)el-table表格自適應(yīng)高度的案例

    這篇文章主要介紹了Vue2+Element-ui實現(xiàn)el-table表格自適應(yīng)高度的案例,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Vue3中defineEmits、defineProps?不用引入便直接用

    Vue3中defineEmits、defineProps?不用引入便直接用

    這篇文章主要介紹了Vue3中defineEmits、defineProps?不用引入便直接用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Vue使用預(yù)渲染代替SSR的方法

    Vue使用預(yù)渲染代替SSR的方法

    這篇文章主要介紹了Vue使用預(yù)渲染代替SSR的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • vueJs函數(shù)readonly與shallowReadonly使用對比詳解

    vueJs函數(shù)readonly與shallowReadonly使用對比詳解

    這篇文章主要為大家介紹了vueJs函數(shù)readonly與shallowReadonly使用對比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Intellij IDEA搭建vue-cli項目的方法步驟

    Intellij IDEA搭建vue-cli項目的方法步驟

    這篇文章主要介紹了Intellij IDEA搭建vue-cli項目的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10

最新評論

门头沟区| 亳州市| 寻乌县| 瓦房店市| 望都县| 蓝山县| 突泉县| 太仓市| 奉贤区| 张家港市| 六盘水市| 美姑县| 筠连县| 衡山县| 尼玛县| 徐闻县| 大关县| 大安市| 三原县| 修武县| 寿宁县| 宁波市| 苍梧县| 筠连县| 长葛市| 藁城市| 东阳市| 工布江达县| 昆明市| 东城区| 玉山县| 衡东县| 芒康县| 紫阳县| 苗栗县| 安泽县| 沈阳市| 福建省| 怀化市| 常德市| 淮阳县|