[Vue學習]生命周期及其各階段舉例

??????? 當我們運行vue項目,看到了屏幕上顯示的界面,看到了界面上顯示的數據和標簽,之后將這個界面叉掉,這一過程其實經歷了一整個vue的生命周期的四個階段,即創建階段、掛載階段、更新階段以及銷毀階段, 而對于每個階段的啟動前和完成后,都可以使用一對鉤子來訪問。

一、創建階段 (beforeCreate/created兩鉤子)

  • beforeCreate:在實例初始化之后,數據觀測 和 事件/偵聽器的配置之前被調用。此時,組件的 datacomputedwatchmethods 上的方法和數據都不可訪問,例如我提前在data中定義了一個變量,在該階段訪問它,只會獲得空值。
  • created:在實例創建完成后被立即調用。在這一步,實例已完成以下的配置:數據觀測,屬性和方法的運算,watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。
<template>  <div>{{ message }}</div>  
</template>  <script>  
export default {  data() {  return {  message: 'Hello Vue!'  }  },  beforeCreate() {  console.log('beforeCreate:', this.message); // undefined,因為data還未初始化  // 這里可以初始化一些不需要依賴data或methods的屬性  },  created() {  console.log('created:', this.message); // Hello Vue!,此時data已初始化  // 這里可以調用API,獲取數據等  this.fetchData();  },  methods: {  fetchData() {  // 模擬異步獲取數據  setTimeout(() => {  // 假設這里是從服務器獲取的數據  const newData = 'New message from server';  // 注意:直接修改data屬性會觸發視圖更新  this.message = newData;  }, 1000);  }  }  
}  
</script>

二、掛載階段 (beforeMount/mounted)

  • beforeMount:在掛載開始之前被調用:相關的 render 函數首次被調用。該鉤子在服務器端渲染期間不被調用。
  • mountedel 被新創建的 vm.$el 替換,并掛載到實例上去之后調用該鉤子。如果根實例掛載了一個文檔內元素,當 mounted 被調用時 vm.$el 也在文檔內。

<template>  <div ref="myDiv">{{ message }}</div>  
</template>  <script>  
export default {  data() {  return {  message: '存儲的內容'  }  },  beforeMount() {  // 這里的$el存在,但內容還是模板字符串  console.log('beforeMount:', this.$el.textContent); // 可能是空字符串或注釋  },  mounted() {  // 組件已掛載到DOM上,可以訪問到DOM元素  console.log('mounted:', this.$refs.myDiv.textContent); // Hello Vue in DOM!  // 可以在這里操作DOM,如添加事件監聽器等  this.$refs.myDiv.addEventListener('click', this.handleClick);  },  methods: {  handleClick() {  console.log('myDiv被點擊了');  }  },  beforeDestroy() {  // 清理事件監聽器,避免內存泄漏  this.$refs.myDiv.removeEventListener('click', this.handleClick);  }  
}  
</script>

三、更新階段(beforeUpdate/updated)

  • beforeUpdate:數據更新時調用,發生在虛擬 DOM 打補丁之前。這里適合在更新之前訪問現有的 DOM,比如手動移除已添加的事件監聽器。
  • updated:由于數據更改導致的虛擬 DOM 重新渲染和打補丁,在這之后會調用這個鉤子。當這個鉤子被調用時,組件 DOM 已經更新,所以現在可以執行依賴于 DOM 的操作。然而在大多數情況下,應該避免在此期間更改狀態,因為這可能會導致更新無限循環。(我要更新了,但是更新時發現有個東西要更新,之后更新這個東西,但是又發現這個東西要更新,然后又又更新......無限循環)

<template>  <div>{{ counter }}</div>  <button @click="increment">Increment</button>  
</template>  <script>  
export default {  data() {  return {  counter: 0  }  },  beforeUpdate() {  console.log('beforeUpdate:', this.counter); // 更新前的值  //此時DOM還未更新  },  updated() {  console.log('updated:', this.counter); // 更新后的值  // 可以在這里執行依賴于DOM的操作,但要避免引起無限更新循環  },  methods: {  increment() {  this.counter++;  }  }  
}  
</script>

四、銷毀階段(beforeDestroy/destroyed)

?在這個階段,Vue 實例將從 DOM 中卸載,并且清理所有的綁定和事件監聽。

  • beforeDestroy(): 在實例銷毀之前調用。這時實例仍然完全可用。

  • destroyed(): 在實例銷毀后調用。調用之后,Vue 實例上的所有東西都會解除綁定,所有的事件監聽器會被移除,所有的子實例也會被銷毀。

銷毀階段的代碼我已經融入到前三個階段的代碼中,在此不再展示.

整個流程:
beforeCreate -> created -> beforeMount -> mounted -> beforeUpdate -> updated -> beforeDestroy -> destroyed

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

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

相關文章

使用 pyecharts 渲染成圖片程序報錯: echarts is not defined問題處理

背景 之前寫的使用 snapshot_selenium 來保存pyeacharts渲染成的網頁截圖&#xff0c;可以正常運行。程序擱置了半年&#xff0c;不知道動了電腦哪里&#xff0c;再次運行程序時&#xff0c;程序開始報錯&#xff1a;JavascriptException: javascript error: echarts is not d…

【SQL】已解決:SQL分組去重并合并相同數據

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;SQL分組去重并合并相同數據 在數據庫操作中&#xff0c;數據的分組、去重以及合并是常見需求。然而&#xff0c;初學者在編寫SQL語句時&#xff0c;可能會遇到一…

正弦波與單位圓關系的可視化 包括源碼

正弦波與單位圓關系的可視化 包括源碼 flyfish 正弦波與單位圓的關系 正弦波可以通過單位圓上的點在直線&#xff08;通常是 y 軸&#xff09;上的投影來表示。具體來說&#xff0c;考慮一個單位圓&#xff0c;其半徑為 1&#xff0c;圓心在原點。我們可以通過旋轉一個角度 …

每日一道算法題 判斷子序列

題目 判斷子序列_牛客題霸_牛客網 (nowcoder.com) Python # # 代碼中的類名、方法名、參數名已經指定&#xff0c;請勿修改&#xff0c;直接返回方法規定的值即可 # # # param S string字符串 # param T string字符串 # return bool布爾型 # class Solution:def isSubseq…

【全網最全流程+所有代碼】企業微信回調聯調,開通企微回調和收到企微回調

流程圖: 只是這里的消息回調,僅作為提示,群內有消息了。不是具體的消息,而是類似這樣的結構,: 如果需要獲取消息,還需要拉取企微群內消息方法,這個后續再更新。 好了,我們開始吧。 開啟消息回調和接收消息回調,地址是一樣的,只是 開啟消息回調,get請求, 接受消…

人工智能在日常生活中的十大應用:從醫療到智能家居

人工智能已成為當今人類日常生活的重要組成部分&#xff0c;無論您是否意識到&#xff0c;它幾乎在所有場景中都能提供幫助。每次您進行網絡搜索、在線預訂旅行、接收來自京東等購物平臺的產品推薦又或是打開您的新浪、抖音時&#xff0c;都能看到影子&#xff0c;這些只是一些…

代碼隨想錄算法訓練營第51天 [115.不同的子序列 583. 兩個字符串的刪除操作 72. 編輯距離 ]

代碼隨想錄算法訓練營第51天 [115.不同的子序列 583. 兩個字符串的刪除操作 72. 編輯距離 ] 一、115.不同的子序列 鏈接: 代碼隨想錄. 思路&#xff1a;dp[i][j] 以t[j-1]為結尾的字符串在 以s[i-1]為結尾的字 符串出現個數 相等的時候 dp[i][j] dp[i - 1][j - 1] dp[i - 1][…

JAVA案例模擬電影信息系統

一案例要求&#xff1a; 二具體代碼(需要在同一個包下創建三個類) Ⅰ&#xff1a;實現類 package 重修;import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {javabean[]moviesnew javabean[4];movies[0] new ja…

加密與安全_ Jasypt (Java Simplified Encryption)不完全指北

文章目錄 官網功能概述Code附 官網 http://www.jasypt.org/ 功能概述 Jasypt 是一個 Java 庫&#xff0c;它允許開發人員以最小的努力添加基本的加密功能&#xff0c;并且不需要深入了解密碼學的工作原理。 高安全性、基于標準的加密技術&#xff0c;適用于單向和雙向加密。…

AIGC對設計師積極性的影響

隨著科技的迅猛發展&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;工具正逐漸深入設計的每個角落&#xff0c;對設計師的工作方式和思維模式產生了深遠的影響。AIGC不僅極大提升了設計師的工作效率&#xff0c;更激發了他們的創新思維&#xff0c;為設計行業帶來了翻…

Spring Boot在java領域中有哪些優勢

哈嘍&#xff0c;大家好呀&#xff0c;淼淼又來和大家見面啦&#xff0c;隨著云計算、微服務架構的興起&#xff0c;Java開發領域迫切需要一套高效、靈活且易于上手的框架來應對日益復雜的業務需求。正是在這樣的背景下&#xff0c;Spring Boot應運而生&#xff0c;以其獨特的魅…

Dungeonborne聯機失敗、延遲高、卡頓的解決方法

Dungeonborne將第一人稱動作的即時性與經典的西幻RPG職業設計巧妙融合&#xff0c;為玩家帶來了一場前所未有的游戲體驗。在這款沉浸式第一人稱PvPvE地下城探險游戲中&#xff0c;我們可以獨自深入探索&#xff0c;也可以與值得信賴的伙伴并肩作戰&#xff0c;共同揭開地下城的…

移動端UI風格營造舒適氛圍

移動端UI風格營造舒適氛圍

中服云數字孿生平臺引領工業物聯仿真新紀元!

中服云數字孿生平臺3.0是基于中服云物聯網平臺和數據中臺打造的一款實時數據2D/3D集成展示監控平臺。 旨在解決工業物聯網數據的直觀展示、實虛互動、仿真模擬、故障診斷、告警、預警、預測、實時觀測、實時監控等問題。提供了數據采集、數據底座、監控邏輯、建模工具、展示互…

android 國內下載Gradle源

在中國使用 Gradle 時&#xff0c;可以配置使用一些國內的鏡像源&#xff0c;以提高下載速度和穩定性。以下是幾個常用的 Gradle 鏡像源地址&#xff1a; 配置 gradle-wrapper.properties 文件: 阿里云: distributionUrlhttps\://services.gradle.org/distributions/gradle-7.…

數據結構 —— 圖的遍歷

數據結構 —— 圖的遍歷 BFS&#xff08;廣度遍歷&#xff09;一道美團題DFS&#xff08;深度遍歷&#xff09; 我們今天來看圖的遍歷&#xff0c;其實都是之前在二叉樹中提過的方法&#xff0c;深度和廣度遍歷。 在這之前&#xff0c;我們先用一個鄰接矩陣來表示一個圖&#…

220千伏變電站輔助設備智能監控平臺 無人化與自動化升級改造工程

220千伏變電站特點 高電壓等級&#xff1a;220千伏變電站的最大特點是其高壓傳輸能力&#xff0c;能夠將發電廠產生的電能高效地傳輸到較遠的地區&#xff0c;滿足大型城市及工業區域的用電需求。 輸電能力大&#xff1a;220千伏變電站在輸電能力上遠大于普通的110千伏或更低…

Mybatis框架的集成使用

1_框架概述 框架是一個半成品&#xff0c;已經對基礎的代碼進行了封裝并提供相應的API&#xff0c;開發者在使用框架時直接調用封裝好的api可以省去很多代碼編寫&#xff0c;從而提高工作效率和開發速度,框架是一種經過校驗、具有一定功能的半成品軟件. 經過校驗&#xff1a;指…

【超萬卡GPU集群關鍵技術深度分析 2024】

文末有福利&#xff01; 1. 集群高能效計算技術 隨著大模型從千億參數的自然語言模型向萬億參數的多模態模型升級演進&#xff0c;超萬卡集群吸需全面提升底層計算能力。 具體而言&#xff0c;包括增強單芯片能力、提升超節點計算能力、基于 DPU (Data Processing Unit) 實現…

淺聊權限系統設計模型

淺聊權限系統設計模型 設計權限目的 目前主流的各類權限管理模型,如基于用戶、角色組、實體等等的權限模型,結合產品本身的業務、面臨的問題和未來的發展兼容,進行權限模型選型,找到適合產品本身的權限范式體系。 權限模型類型 ACL:權限控制列表(Access Control List)D…