Nuxt3 的生命周期和鉤子函數(一)


title: Nuxt3 的生命周期和鉤子函數(一)
date: 2024/6/25
updated: 2024/6/25
author: cmdragon

excerpt:
摘要:本文是關于Nuxt3的系列文章之一,主要探討Nuxt3的生命周期和鉤子函數,引導讀者深入了解其在前端開發中的應用。文章提供了往期相關文章鏈接,涉及Nuxt中間件、Composables、狀態管理、路由系統、組件開發等多個方面,幫助讀者全面掌握Nuxt3框架的特性和實踐技巧。

categories:

  • 前端開發

tags:

  • Nuxt3
  • 生命周期
  • 鉤子函數
  • 前端開發
  • Web框架
  • Vue.js
  • 應用教程


在這里插入圖片描述

掃碼關注或者微信搜一搜:編程智域 前端至全棧交流與成長

app:created

  • 描述:在初始 Vue 應用實例創建時調用。這個鉤子是在 Nuxt 應用啟動時,Vue 應用實例被創建之后立即觸發的。
  • 服務器端:?
  • 客戶端:?

用法

app:created 鉤子可以在 nuxt.config.ts 文件中的 plugins 或者在頁面組件中使用。

示例代碼

nuxt.config.ts 中的插件中使用:

// nuxt.config.ts
export default defineNuxtConfig({plugins: [{src: '~/plugins/my-plugin',mode: 'client', // 或者 'server' 或 'all'},],
})// plugins/my-plugin.ts
export default defineNuxtPlugin((nuxtApp) => {nuxtApp.hook('app:created', () => {console.log('Vue 應用實例已創建');// 這里可以執行一些初始化邏輯});
});

在頁面組件中使用:

<template><div>頁面內容</div>
</template><script setup>
import { onBeforeMount } from 'vue'onBeforeMount(() => {// 這個鉤子會在 'app:created' 之后調用console.log('頁面組件即將掛載');
})const nuxtApp = useNuxtApp()nuxtApp.hook('app:created', () => {console.log('Vue 應用實例已創建 - 頁面級別');
});
</script>

在這個示例中,app:created 鉤子被用于在 Vue 應用實例創建時輸出一條消息。這可以用于執行一些全局的初始化任務,比如設置全局變量或狀態,注冊全局組件等。需要注意的是,在服務器端渲染 (SSR) 的上下文中,這個鉤子會在服務器上為每個請求調用一次。在客戶端,這個鉤子只在應用初始化時調用一次。

app:error err 服務器端和客戶端 在發生致命錯誤時調用。

詳細解釋

app:error 是 Nuxt 3 的一個全局生命周期鉤子,它在服務器端和客戶端發生未捕獲的致命錯誤時被調用。這個鉤子允許你定義一個自定義的錯誤處理函數,以便在發生錯誤時執行特定的邏輯,比如記錄錯誤信息、發送錯誤報告、顯示錯誤消息或者重定向到錯誤頁面。

用法

在 Nuxt 3 應用中,你可以通過在 defineNuxtPlugin 函數中注冊 app:error 鉤子來使用它。

export default defineNuxtPlugin((nuxtApp) => {nuxtApp.hook('app:error', (err, ctx) => {// 自定義錯誤處理邏輯});
});

案例Demo

// plugins/error-handler.js
export default defineNuxtPlugin((nuxtApp) => {nuxtApp.hook('app:error', (err, ctx) => {console.error('An error occurred:', err.message);// 如果是客戶端錯誤,可以顯示一個錯誤消息給用戶if (process.client) {alert('An error occurred: ' + err.message);}// 如果是服務器端錯誤,可以記錄到日志文件或發送到錯誤追蹤服務if (process.server) {// 例如,使用 winston 或其他日志庫記錄錯誤// logger.error('Server error:', err);// 或者發送錯誤到錯誤追蹤服務,如 Sentry// Sentry.captureException(err);}// 可以根據錯誤類型決定是否重定向if (err.statusCode === 404) {// 重定向到404頁面ctx.redirect('/404');}});
});

在這個案例中,我們定義了一個 app:error 鉤子,當發生錯誤時,它會打印錯誤信息到控制臺。如果是客戶端錯誤,它會彈出一個包含錯誤信息的警告框。如果是服務器端錯誤,它可以記錄錯誤日志或發送錯誤到錯誤追蹤服務。此外,如果錯誤是一個特定的狀態碼(例如404),我們可以重定向用戶到一個特定的頁面。

app:error:cleared { redirect? } 服務器端和客戶端 在致命錯誤被清除后調用。

詳細解釋

app:error:cleared 是 Nuxt 3 的一個全局生命周期鉤子,它在服務器端和客戶端的致命錯誤被清除后調用。這個鉤子允許你在錯誤被處理后執行后續操作,比如重定向用戶到另一個頁面。這個鉤子接收一個可選的 redirect 參數,它允許你指定一個重定向的路徑。

用法

在 Nuxt 3 應用中,你可以通過在 defineNuxtPlugin 函數中注冊 app:error:cleared 鉤子來使用它。

export default defineNuxtPlugin((nuxtApp) => {nuxtApp.hook('app:error:cleared', (redirect, ctx) => {// 自定義錯誤清除后的邏輯});
});

案例Demo

// plugins/error-clear-handler.js
export default defineNuxtPlugin((nuxtApp) => {nuxtApp.hook('app:error:cleared', (redirect, ctx) => {// 如果提供了重定向路徑,則進行重定向if (redirect) {ctx.redirect(redirect);}// 可以在這里執行其他清理工作,例如清除錯誤狀態// 或者通知用戶錯誤已經被處理if (process.client) {// 例如,更新UI來反映錯誤已經被處理// updateErrorState(false);}// 如果是服務器端,可能需要清除服務器狀態或發送通知if (process.server) {// 清理服務器狀態或發送通知// serverCleanup();}});
});

在這個案例中,我們定義了一個 app:error:cleared 鉤子,當致命錯誤被清除后,它會檢查是否提供了重定向路徑,如果提供了,則執行重定向。此外,它還可以執行其他清理工作,例如在客戶端更新UI狀態以反映錯誤已經被處理,或者在服務器端清理服務器狀態或發送通知。這個鉤子是處理錯誤后恢復應用狀態的有用工具。

app:data:refresh keys? 服務器端和客戶端 (內部)

詳細解釋

app:data:refresh 是 Nuxt 3 中的一個內部生命周期鉤子,主要用于數據刷新。它在需要重新獲取數據時被觸發,通常發生在用戶刷新頁面或者在某些情況下數據更新后。keys 參數是可選的,它是一個數組,包含需要刷新的數據的鍵名,如果不提供,會刷新所有數據。

用法

在 Nuxt 3 中,你通常不會直接在 defineNuxtPlugin 中使用這個鉤子,因為它是內部調用的。然而,如果你需要在插件中影響數據刷新行為,可以通過監聽相關事件來間接使用。

export default defineNuxtPlugin((nuxtApp) => {nuxtApp.on('dataRefresh', (keys) => {// 在這里處理數據刷新操作,例如更新緩存、請求新數據等if (keys) {// 如果提供了keys,只刷新指定的數據keys.forEach((key) => {nuxtApp.$store.dispatch('refreshData', key);});} else {// 否則刷新所有數據nuxtApp.$store.dispatch('refreshAllData');}});
});

案例Demo

// plugins/data-refresh.js
export default defineNuxtPlugin((nuxtApp) => {nuxtApp.on('dataRefresh', async (keys) => {if (keys) {const promises = keys.map(async (key) => {const freshData = await fetchNewData(key);nuxtApp.$store.commit('updateData', { key, data: freshData });});await Promise.all(promises);} else {const allData = await fetchAllData();nuxtApp.$store.commit('updateAllData', { data: allData });}});
});// 在 store 中定義 mutation
export const mutations = {updateData(state, { key, data }) {state[key] = data;},updateAllData(state, { data }) {state = data;},
};

在這個案例中,我們創建了一個插件,監聽 dataRefresh 事件。當事件觸發時,我們根據提供的 keys 刷新指定的數據,或者刷新所有數據。然后,我們更新 Vuex 存儲中的數據。注意,實際的 fetchNewDatafetchAllData 需要你根據你的應用邏輯來實現。

vue:setup - 服務器端和客戶端 (內部)

詳細解釋

vue:setup 是 Nuxt 3 中的一個生命周期鉤子,它在每個 Vue 組件的 setup 階段被調用。這個鉤子主要用于在組件的初始化階段進行數據處理、依賴注入、API 設置等操作。由于它是基于 Vue 的,所以它在客戶端和服務器端都會執行,但服務器端渲染時,它主要作用于預渲染階段。

用法

在 Nuxt 3 中,vue:setup 通常用于創建自定義組件,它會接收一個 app 對象,你可以通過這個對象訪問 Nuxt 應用實例。例如,你可以注入 $store$router,并定義組件的局部狀態和方法。

export default defineComponent({setup() {const store = inject('store');const router = inject('router');// 在這里定義組件的局部狀態和方法const count = ref(0);const increment = () => {count.value++;};// 使用store和routerwatch(() => router.currentRoute.value.name, () => {// 當路由改變時執行某些操作});return {count,increment,};},
});

案例Demo

// components/MyComponent.vue
export default defineComponent({setup() {const { $store } = inject();const myData = ref($store.state.myData);// 在setup中獲取并使用store中的數據useEffect(() => {async function fetchData() {const newData = await fetchMyData();myData.value = newData;}fetchData();}, []);// 示例方法,使用store數據const updateData = (newValue) => {myData.value = newValue;$store.commit('updateMyData', newValue);};return {myData,updateData,};},
});// 在store/index.js中定義mutation
export const mutations = {updateMyData(state, newData) {state.myData = newData;},
};

在這個案例中,我們在 vue:setup 中注入 $store,獲取并使用存儲中的數據。當組件掛載時,我們會從服務器獲取數據并更新組件狀態。同時,我們定義了一個 updateData 方法,用于更新 store 中的數據。在客戶端和服務器端,這個組件都會執行這些操作。

vue:error - err, target, info - 服務器端和客戶端 - 當 Vue 錯誤傳播到根組件時調用。了解更多。

詳細解釋

vue:error 是 Nuxt 3 中的一個生命周期鉤子,它在 Vue 應用程序的錯誤處理過程中起作用。當 Vue 錯誤傳播到根組件時,這個鉤子會被調用。這個鉤子可以用于在服務器端和客戶端記錄和處理錯誤。

app:rendered - renderContext - 服務器端 - 在 SSR 渲染完成時調用

app:rendered

鉤子:app:redirected

余下文章內容請點擊跳轉至 個人博客頁面 或者 掃碼關注或者微信搜一搜:編程智域 前端至全棧交流與成長,閱讀完整的文章:Nuxt3 的生命周期和鉤子函數(一) | cmdragon’s Blog

往期文章推薦:

往期文章歸檔:

  • 初學者必讀:如何使用 Nuxt 中間件簡化網站開發 | cmdragon’s Blog
  • 深入探索 Nuxt3 Composables:掌握目錄架構與內置API的高效應用 | cmdragon’s Blog
  • 掌握 Nuxt 3 中的狀態管理:實踐指南 | cmdragon’s Blog
  • Nuxt 3 路由系統詳解:配置與實踐指南 | cmdragon’s Blog
  • Nuxt 3組件開發與管理 | cmdragon’s Blog
  • Nuxt3頁面開發實戰探索 | cmdragon’s Blog
  • Nuxt.js 深入淺出:目錄結構與文件組織詳解 | cmdragon’s Blog
  • 安裝 Nuxt.js 的步驟和注意事項 | cmdragon’s Blog
  • 探索Web Components | cmdragon’s Blog
  • Vue微前端架構與Qiankun實踐理論指南 | cmdragon’s Blog
  • Vue 3深度探索:自定義渲染器與服務端渲染 | cmdragon’s Blog

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

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

相關文章

C++ | Leetcode C++題解之第198題打家劫舍

題目&#xff1a; 題解&#xff1a; class Solution { public:int rob(vector<int>& nums) {if (nums.empty()) {return 0;}int size nums.size();if (size 1) {return nums[0];}int first nums[0], second max(nums[0], nums[1]);for (int i 2; i < size; …

革新城市景觀:輕空間設計團隊呈現“淄博會展中心”

“淄博會展中心”&#xff0c;作為國內最大的氣膜會展建筑群&#xff0c;自啟用以來已經成為淄博市的亮麗新名片和經濟引擎。該會展中心在第二十屆中國&#xff08;淄博&#xff09;國際陶瓷博覽會上首次亮相&#xff0c;其獨特的設計和先進的建筑理念吸引了廣泛關注。今天&…

MaxWell實時監控Mysql并把數據寫入到Kafka主題中

配置mysql 啟用MySQL Binlog MySQL服務器的Binlog默認是未開啟的&#xff0c;如需進行同步&#xff0c;需要先進行開啟 修改MySQL配置文件/etc/my.cnf sudo vim/etc/my.cof 增加如下配置 注&#xff1a;MySQL Binlog模式 Statement-based&#xff1a;基于語句&#xff0c;…

深入解析:批處理文件中echo命令的多功能用法

深入解析&#xff1a;批處理文件中echo命令的多功能用法 批處理文件&#xff0c;通常以.bat或.cmd為擴展名&#xff0c;在Windows操作系統中扮演著自動化腳本的角色。在這些腳本中&#xff0c;echo命令是使用最頻繁的命令之一。本文將詳細解釋echo命令的多種用法&#xff0c;并…

記錄bug導致測試部署出錯,但是本地環境啟動正常。雪花算法使用中報錯。并帶有源碼分析。

bug出現背景 集群產生的日志要求traceId不重復&#xff0c;使用雪花算法生成traceId 報錯形式如下 為什么本地無法復現測試環境的bug 因為bug的出現本身就是概率性的事件 代碼如下 public static Long workId Long.parseLong(String.valueOf(NetUtil.getLocalhostStr().ha…

故障診斷 | HO-VMD-TCN河馬優化算法優化變分模態分解時間卷積神經網絡故障診斷模型

效果一覽 文章概述 故障診斷 | HO-VMD-TCN河馬優化算法優化變分模態分解時間卷積神經網絡故障診斷模型&#xff01;河馬優化算法&#xff08;Hippopotamus optimization algorithm&#xff0c;HO&#xff09;由Amiri等人于2024年提出&#xff0c;該算法模擬了河馬在河流或池塘中…

“華為杯”第十四屆中國研究生 數學建模競賽-A題:無人機在搶險救災中的優化運用

目錄 摘 要: 1 問題重述 2 問題分析 3 問題假設 4 變量說明 5 模型的建立與求解 5.1 問題 1 的建立與求解 5.1.1 模型分析 5.1.2 問題 1 的建立 5.1.3.1 貪心算法 5.2 問題 2 的建立與求解 5.2.1 問題 2 的建立 5.2.2 問題 2 的求解 5.3 問題 3 的建立與求解 5.3.1 問題 3 的建…

21 Shell編程之正則表達式與文本處理器

目錄 21.1 正則表達式 21.1.1 正則表達式概述 21.1.2 基礎正則表達式 21.1.3 擴展正則表達式 21.2 文本處理器 21.2.1 sed工具 21.2.2 awk工具 21.2.3 sort工具 21.2.4 uniq工具 21.1 正則表達式 21.1.1 正則表達式概述 1.正則表達式概述 正則表達式又稱正規表達式、常規表達…

離線部署OpenIM

目錄 1.提取相關安裝包和鏡像 2.安裝docker和docker-compose 3.依次導入鏡像 4.解壓安裝包 5.執行安裝命令 6.PC Web 驗證 7.開放端口 7.1IM 端口 7.2Chat 端口 7.3 PC Web 及管理后臺前端資源端口 “如果您在解決類似問題時也遇到了困難&#xff0c;希望我的經驗分享…

HTML+CSS 彩色浮雕按鈕

效果演示 實現了一個彩色按鈕特效&#xff0c;包括一個按鈕&#xff08;button&#xff09;和一個前景色&#xff08;::before&#xff09;。按鈕具有四種不同的顏色&#xff0c;當鼠標懸停在按鈕上時&#xff0c;前景色會出現漸變效果&#xff0c;并且按鈕的顏色、文本陰影和邊…

Windows 獲取打印機及端口號方法 (C#)

1. 打開注冊表編輯器 regedit 2.選擇如下配置 計算機\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Device 3. 代碼 C# using System; using Microsoft.Win32;class Program {static void Main(){string registryPath "SOFTWARE\Microsoft\Windows …

優選算法2

五、位運算 常見位運算總結 &&#xff1a;有0就是0&#xff1b; |&#xff1a;有1就是1 ^&#xff1a;相同為0&#xff0c;相異就是1/無進位相加 給定一個數n,確定它的二進制表示中的第x位是0還是1&#xff1a;二進制中權值最小的是第0位&#xff0c;所以int整型是從第0位到…

堅持100天學習打卡Day1

1.大小端 2.引用的本質 及 深拷貝與淺拷貝 3.初始化列表方式 4.類對象作為類成員 5.靜態成員 static

vue3使用v-html實現文本關鍵詞變色

首先看應用場景 這有一段文本內容&#xff0c;是項目的簡介&#xff0c;想要實現將文本中的關鍵詞進行變色處理 有如下關鍵詞 實現思路 遍歷文本內容&#xff0c;找到關鍵詞&#xff0c;并使用某種方法更改其字體樣式。經過搜尋資料決定采用v-html實現&#xff0c;但是v-h…

解決pycharm安裝dlib失敗的問題

今天使用pycharm來學習opencv人臉識別庫face-recognition的時候出現了一點小問題&#xff0c;在pycharm中直接安裝face-recognition會失敗&#xff0c;說是因為缺少依賴庫dlib&#xff0c;但是直接使用pycharm安裝dlib庫也有問題&#xff0c;不知道大家遇到沒有 錯誤提示 note…

【深度學習】菜品目標檢測軟件系統

深度學習類文章回顧 【YOLO深度學習系列】圖像分類、物體檢測、實例分割、物體追蹤、姿態估計、定向邊框檢測演示系統【含源碼】 【深度學習】物體檢測/實例分割/物體追蹤/姿態估計/定向邊框/圖像分類檢測演示系統【含源碼】 【深度學習】YOLOV8數據標注及模型訓練方法整體流程…

AI智能寫作工具,AI寫作助手大全

隨著人工智能技術的快速發展&#xff0c;AI智能寫作工具助手已成為學術研究、內容創作和商業文案等領域的重要輔助工具。它們不僅能夠提高寫作效率&#xff0c;還能激發創意靈感&#xff0c;為各行各業的專業人士提供了強大的支持。下面小編將為大家全面介紹目前市場上備受矚目…

[C#][opencvsharp]C#使用opencvsharp進行年齡和性別預測支持視頻圖片檢測

使用 OpenCVSharp 來調用 age_net.caffemodel 和 gender_net.caffemodel 來進行性別和年齡預測涉及幾個步驟。以下是一個簡化的流程和示例文案&#xff1a; 1. 準備工作 確保你已經安裝了 OpenCVSharp 和相關的依賴項。確保你有 age_net.prototxt、age_net.caffemodel、gende…

大數據面試必問的數據治理面試題大全及參考答案

什么是數據治理?它與數據管理的區別是什么? 數據治理是組織內數據的系統性管理策略,它確保數據在整個生命周期中的可用性、準確性、安全性和合規性。數據治理不僅關乎技術實施,更是關于組織結構、政策、流程和標準的建立,以指導數據的收集、存儲、處理、保護和利用。它關…

代碼隨想錄算法跟練 | Day10 | 棧與隊列 Part01

個人博客主頁&#xff1a;http://myblog.nxx.nx.cn 代碼GitHub地址&#xff1a;https://github.com/nx-xn2002/Data_Structure.git Day10 232. 用棧實現隊列 題目鏈接&#xff1a; https://leetcode.cn/problems/implement-queue-using-stacks/ 題目描述&#xff1a; 請你僅…