全棧開發之路——前端篇(6)生命周期和自定義hooks

全棧開發一條龍——前端篇
第一篇:框架確定、ide設置與項目創建
第二篇:介紹項目文件意義、組件結構與導入以及setup的引入。
第三篇:setup語法,設置響應式數據。
第四篇:數據綁定、計算屬性和watch監視
第五篇 : 組件間通信及知識補充

輔助文檔:HTML標簽大全(實時更新)

本篇將講述生命周期和自定義hooks,非常重要,請務必搞懂

文章目錄

  • 一、生命周期(函數)
  • 二、Vue2的生命周期
      • 1.創建前/創建完畢
      • 2.掛載前/掛載完畢
      • 3.更新前/更新完畢
      • 4.銷毀前/銷毀后
  • 三、Vue3的生命周期
      • 1.創建
      • 2.掛載
      • 3.更新
      • 4.卸載(即Vue2的銷毀)
      • 5.嵌套組件的生命周期
  • 生命周期總結
  • 四、自定義hooks

一、生命周期(函數)

組件的生命周期就是組件創建(created)、掛載(mounted)、更新(update)和銷毀的過程,我們可以通過調用生命周期函數,在這些過程前后進行操作。

二、Vue2的生命周期

我們之所以要講Vue2,是因為Vue2與Vue3有相通之處但也有不同的地方,而有些項目是用Vue2寫的,為了防止理解出現障礙,故先說Vue2的生命周期。

1.創建前/創建完畢

在創建階段,有兩個生命周期函數:創建前函數和創建后函數。分別為beforeCreate 和 created


在組件創建前后,會自動執行你寫在其中的函數(你可以將各個生命周期函數的順序打亂,不影響Vue自動在對應事件時調用函數)。

2.掛載前/掛載完畢

我們用beforeMount和mounted來寫掛載的生命周期函數。
所謂掛載,就是你寫的內容出現在html頁面上的過程。我們,可以用debugger;(斷點測試)來更好的理解這個過程。


頁面直接為空了,說明未能掛載成功。

3.更新前/更新完畢

我們用 beforeUpdate 和 updated來調用。

比如有一個按鈕,你點擊以下counter就加1.
在你不點擊的時候,before和uodated都不會調用。當你點擊之后,會先調用before,更改完之后,會調用updated。

4.銷毀前/銷毀后

我們用beforeDestroy和destroyed來調用
某個組件如果有存在條件,則在條件不滿足的時候會被銷毀,就會進入銷毀這個生命周期。

三、Vue3的生命周期

1.創建

Vue3直接用setup模擬create過程了,沒有before和created的區分了。

2.掛載

你先要引入onBeforeMount。
import {onBeforeMount} from vue'
再調用時,我們要這個函數中加入一個回調函數,這個回調函數就是在掛載時調用的。

onBeforeMount( ()=>{  } )

同理有掛載完畢時調用的為onMounted

3.更新

用法與掛載一致。請先引入onBeforeUpdateonUpdated,然后在其中加入回調函數屬性。

4.卸載(即Vue2的銷毀)

同理,函數名為onBeforeUnmountonUnmounted

5.嵌套組件的生命周期

在父子組件中,子的優先于父的。

假設圖片中為父組件調用子組件的案例,Vue會先創建掛載完person中的所有內容,才會回到父組件繼續加載。所以子組件優先于父組件加載。

生命周期總結


比較常用的有
1.掛載完畢 : onMounted
2.更新完畢 : onUpdated
3.卸載之前 : onBeforeUnmount

四、自定義hooks

想要運行這個例子,請先安裝npm i axios(在終端運行)
由于筆者喜歡邊牧,下面的例子以隨機獲取一只邊牧為例。

<template><div class = "style_test">    <button @click="add_border_collie">添加一只邊牧!</button>   <hr><img v-for="(bc,index) in border_collie" :src="bc" :key="index" class="sizee"></div><div class = "style_test">   <button @click="add_dog">隨機添加一只狗</button>   <hr><img v-for="(bc,index) in dog" :src="bc" :key="index" class="sizee"></div>
</template><script lang="ts">export default {name : 'Test'//組件名}
</script><script lang="ts" setup>import {reactive, ref} from 'vue'import axios from 'axios';let border_collie=reactive([])let dog=reactive([])async function add_border_collie(){try{let result=await axios.get('https://dog.ceo/api/breed/collie/border/images/random')border_collie.push(result.data.message)} catch(error){alert(error)}}async function add_dog(){try{let result=await axios.get('https://dog.ceo/api/breeds/image/random')dog.push(result.data.message)} catch(error){alert(error)}}</script><style scoped>.style_test{background-color: rgb(208, 223, 40);box-shadow: 0 0 10px;border-radius:10px;  padding: 20px;}.sizee{height: 150px;margin-right: 10px;}
</style>


為了照顧不喜歡邊牧的人,我們又添加了一個隨機添加狗狗。這就導致代碼一大坨,不好維護,而且事實上,這與vue2也沒什么區別。
那么接下來我們就要說到自定義hook(前端的模塊化編程)。
我們現在src文件夾下建立hooks文件,然后在這個文件夾中新建一個.ts文件。

把一個模塊需要用的所有內容寫進去,然后return一個外部可以調用的接口即可。比如這里我把獲取邊牧圖片的模塊放了進去

import {reactive, ref} from 'vue'
import axios from 'axios';export default function (){let border_collie=reactive([])async function add_border_collie(){try{let result=await axios.get('https://dog.ceo/api/breed/collie/border/images/random')border_collie.push(result.data.message)} catch(error){alert(error)}        }return {border_collie,add_border_collie}
}

之后,在父親組件中,我們需要引入,引入使用就行了。

import get_bc from '@/hooks/get_bc';const {border_collie,add_border_collie} = get_bc()

功能完全不變。這就給我們提供了一個可以封裝的寫法,防止主組件過于亂,方便維護,方便結對編程。
hooks是Vue3組合式API的真諦

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

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

相關文章

碼一點網站

Linux命令查詢網站 https://www.lzltool.com/LinuxCommand/Index 小林 x 圖解計算機基礎 https://xiaolincoding.com/ 代碼隨想錄 https://programmercarl.com/ 可用于爬蟲 https://books.toscrape.com/ 數據結構可視化 https://www.cs.usfca.edu/~galles/visualization/ …

fastText-文本分類

fastText介紹 fastText是一個快速文本分類算法,與基于神經網絡的分類算法相比有兩大優點: 1、fastText在保持高精度的情況下加快了訓練速度和測試速度 2、fastText不需要預訓練好的詞向量,fastText會自己訓練詞向量 3、fastText兩個重要的優化:Hierarchical Softmax、N-gr…

387.字符串中的第一個唯一字符

刷算法題&#xff1a; 第一遍&#xff1a;1.看5分鐘&#xff0c;沒思路看題解 2.通過題解改進自己的解法&#xff0c;并且要寫每行的注釋以及自己的思路。 3.思考自己做到了題解的哪一步&#xff0c;下次怎么才能做對(總結方法) 4.整理到自己的自媒體平臺。 5.再刷重復的類…

YUV中Y顏色模型的采樣

YUV的特點 相對于表示顏色的GUI&#xff0c; YUI將亮度&#xff08;用Y表示&#xff09;與色調&#xff08;用U和V表示&#xff09;分開來表示。又因為人類視網膜上的視網膜桿細胞要多于視網膜錐細 胞&#xff0c;說得通俗一些&#xff0c;視網膜桿細胞的作用就是識別亮度&…

LabVIEW MEMS電容式壓力傳感器測試系統

LabVIEW MEMS電容式壓力傳感器測試系統 隨著微電子技術的發展&#xff0c;MEMS&#xff08;微電機系統&#xff09;技術在各個領域得到了廣泛應用。MEMS電容式壓力傳感器以其高靈敏度、小尺寸、低功耗等優點&#xff0c;在微傳感器領域占據了重要的地位。然而&#xff0c;這些…

Smma-net:一種基于音頻線索的目標說話人提取網絡,具有譜圖匹配和相互關注功能

SMMA-NET: AN AUDIO CLUE-BASED TARGET SPEAKER EXTRACTION NETWORK WITH SPECTROGRAM MATCHING AND MUTUAL ATTENTION 第二章 目標說話人提取之《Smma-net:一種基于音頻線索的目標說話人提取網絡&#xff0c;具有譜圖匹配和相互關注功能》 文章目錄 SMMA-NET: AN AUDIO CLUE-…

程序員的多維智慧:技術修煉、人際交往與投資哲學

程序員不應該只會埋頭敲代碼&#xff0c;要多看看書&#xff0c;多學習... 1.程序員技術 保持嚴謹的作風&#xff0c;實事求是&#xff0c;記錄現象&#xff0c;找準依據&#xff0c;可以做出假設&#xff0c;問題的解釋和結論必須能完整、全面符合現象和各種認知邏輯。 絕不…

【算法入門賽】B. 自助店評分(C++、STL、推薦學習)題解與代碼

比賽地址&#xff1a;https://www.starrycoding.com/contest/8 題目描述 在上一場的入門教育賽中&#xff0c;牢 e e e找到了所有自助店的位置&#xff0c;但是他想發現一些“高分好店”&#xff0c;于是他利用爬蟲技術從“小眾點評APP”中爬取了武漢所有自助店的評分。 評分…

Python 機器學習 基礎 之 構建第一個機器學習應用

Python 機器學習 基礎 之 構建第一個機器學習應用 目錄 Python 機器學習 基礎 之 構建第一個機器學習應用 一、簡單介紹 二、第一個機器學習測試應用介紹&#xff1a;鳶尾花分類 三、第一個機器學習測試應用 &#xff1a;前置環境&#xff0c;知識點介紹 jupyter notebo…

mamba-ssm安裝卡著不動

項目中用到Mamba的小伙伴&#xff0c;causal_conv1d和 mamba-ssm兩個包&#xff0c;但是會卡在Building wheel for mamba-ssm (setup.py) &#xff1a; 為了探究卡在了building的哪一步&#xff0c;加入–verbose進行顯示&#xff1a; pip install mamba-ssm --no-cache-dir -…

Linux 安裝JDK和Idea

安裝JDK 下載安裝包 下載地址&#xff1a; Java Downloads | Oracle (1) 使用xshell 上傳JDK到虛擬機 (2) 移動JDK 包到/opt/environment cd ~ cd /opt sudo mkdir environment # 在 /opt下創建一個environment文件夾 ls# 復制JDK包dao /opt/environment下 cd 下載 ls jd…

openGauss學習筆記-279 openGauss性能調優-實際調優案例08-改寫SQL消除in-clause

文章目錄 openGauss學習筆記-279 openGauss性能調優-實際調優案例08-改寫SQL消除in-clause279.1 現象描述279.2 優化說明openGauss學習筆記-279 openGauss性能調優-實際調優案例08-改寫SQL消除in-clause 279.1 現象描述 in-clause/any-clause是常見的SQL語句約束條件,有時in…

Jmeter性能測試(三)

token鑒權處理 1、添加json提取器 2、寫jsonpath表達式在響應Body中提取鑒權token token&#xff1a;變量名&#xff0c;可以直接引用 $…token&#xff1a;token數據在響應中的字段名稱&#xff0c;根據自己情況寫就行 3、將提取出來的token添加到請求頭中 重點&#xff…

postman常用功能超全使用教程

Postman 使用 一、Postman 簡介 Postman是一個接口測試工具,在做接口測試的時候,Postman相當于一個客戶端,它可以模擬用戶發起的各類HTTP請求(如:get/post/delete/put…等等),將請求數據發送至服務端,獲取對應的響應結果。 二、Postman 功能簡介 三、Postman 下載安裝 Post…

ssrf(第二彈)

四&#xff0c;post請求 1.打開環境&#xff0c;提示說發一個HTTP POST請求&#xff0c;ssrf是用php的curl實現的.并且會跟蹤302跳轉。 2.用dirsearch掃一下常見的端口&#xff0c;看到有三個可以訪問的頁面 3.構造偽協議&#xff0c;因為要通過172.0.0.1訪問&#xff0c;我們…

基于OpenCV對胸部CT圖像的預處理

1 . 傳作靈感 胸部CT中所包含的噪聲比較多&#xff0c;基于OpenCV簡單的做一些處理&#xff0c;降低后續模型訓練的難度。 2. 圖像的合成 在語義分割任務中有的時候需要將原圖&#xff08;imput&#xff09;和標注數據&#xff08;groudtruth&#xff09;合成一幅圖像&#x…

Java——接口的補充

目錄 一&#xff1a;接口的注意事項 1. 接口中不能有方法塊&#xff1b; 2. 接口沒有構造方法&#xff1a; 3.接口是可以多繼承的&#xff1b; 4. 多個接口抽象方法重復 5. 類的父類方法與接口方法重復 二&#xff1a;類與接口 1. 繼承與實現 2. 多個父接口的抽象…

AzureDataFactory 表選項之自動創建表

接上篇, 該篇里表與表之間采取了提前mapping的方式&#xff0c;通過Import schemas的方式將源和目標的表的schemas做了一對一的匹配 但如果我的應用場景是將D365的表數據推送到外部數據源&#xff0c;需要原表clone&#xff0c;如果我去先建表建字段再做mapping未免過于繁瑣&am…

基于WPF的DynamicDataDisplay曲線顯示

一、DynamicDataDisplay下載和引用 1.新建項目,下載DynamicDataDisplay引用: 如下圖: 二、前端開發: <Border Grid.Row="0" Grid.Column="2" BorderBrush="Purple" BorderThickness="1" Margin="2"><Grid>…

面試筆記——類加載器

基礎 類加載器&#xff1a;用于裝載字節碼文件(.class文件)運行時數據區&#xff1a;用于分配存儲空間執行引擎&#xff1a;執行字節碼文件或本地方法垃圾回收器&#xff1a;用于對JVM中的垃圾內容進行回收 類加載器 &#xff1a;JVM只會運行二進制文件&#xff0c;類加載器的…