Vue生命周期和MVVM框架

来源:https://www.cnblogs.com/wang622/archive/2022/07/15/16475531.html
-Advertisement-
Play Games

生命周期 組件從開始到結束的全過程 創建階段:beforeCreate、created 掛載階段:beforeMount、mounted 更新階段:beforeUpdate、updated 銷毀階段:beforeDestroy、destroyed 與動態組件有關的兩個特殊的鉤子: activated ...


生命周期

組件從開始到結束的全過程

  • 創建階段:beforeCreate、created
  • 掛載階段:beforeMount、mounted
  • 更新階段:beforeUpdate、updated

  • 銷毀階段:beforeDestroy、destroyed

與動態組件有關的兩個特殊的鉤子:

activated(激活)、deactivated(休眠)

與組件異常捕獲有關的一個鉤子:

errorCaptured

生命周期有哪些

  • beforeCreate:聲明methods方法,聲明生命周期鉤子
  • created:註入provide數據,響應式劫持、把data上數據遍歷後放在this上
  • beforeMount:通過el/$mount/template找視圖模板,把template視圖模板編譯成render() (render方法是用於創建虛擬DOM的)
  • mounted:創建$el掛載節點,調用render()方法第一次生成虛擬DOM(Vnode是對真實視圖結構的一種數據描述),Vue開始編譯工作,迴圈遞歸,指令和聲明式變數進行touch,依賴收集、通知Watcher第一次完成DOM渲染
  • beforeUpdate:網頁呈現在你的面前上,當各種事件交互觸發data變化時
  • updated:再次調用render()方法生成新的虛擬DOM(現在就有了兩個虛擬DOM,執行patch運算(diff運算)找出兩個虛擬DOM之間的最小差異(臟節點集合),通過一個隊列進行非同步更新。
  • beforeDestroy:當調用$destroy()或路由切換時,即將進入銷毀階段
  • destroyed:移除當前組件的Watcher(DOM將無法再更新了),拆卸掉所有的子組件,移除事件監聽器(wacth等等)
    const app = new Vue({
      data () {
        return {
          num: 1
        }
      },
      watch: {
        num () {
          console.log('--- num changed')
        }
      },
      // 聲明methods方法
      // 聲明生命周期鉤子
      beforeCreate () {
        console.log('---beforeCreate')
      },
      // 註入provide數據
      // 響應式劫持、把data上數據遍歷後放在this上
      created () {
        console.log('---created')
        // 調介面
      },
      // 通過el/$mount/template找視圖模板
      // 把template視圖模板編譯成render() (render方法是用於創建虛擬DOM的)
      beforeMount () {
        console.log('---beforeMount')
      },
      // 創建$el掛載節點
      // 調用render()方法第一次生成虛擬DOM(Vnode是對真實視圖結構的一種數據描述)
      // Vue開始編譯工作,迴圈遞歸,指令和聲明式變數進行touch,依賴收集、通知Watcher第一次完成DOM渲染
      mounted () {
        console.log('---mounted')
        // 調介面、開定時器、建立websocket長連接、echarts圖表實例化、DOM/BOM操作。。。
      },
      // 網頁呈現你的面前上,當各種事件交互觸發data變化時
      beforeUpdate () {
        console.log('---beforeUpdate')
      },
      // 再次調用render()方法生成新的虛擬DOM(現在就有了兩個虛擬DOM)
      // 執行patch運算(diff運算)找出兩個虛擬DOM之間的最小差異(臟節點集合),通過一個隊列進行非同步更新。
      updated () {
        console.log('---updated')
        // updated在某些場景下,可以模擬出watch/$nextTick()的功能。
      },
      // 當調用$destroy()或路由切換時,即將進入銷毀階段
      beforeDestroy () {
        console.log('---beforeDestroy')
        // 清除定時器、清除緩存
      },
      // 移除當前組件的Watcher(DOM將無法再更新了)
      // 拆卸掉所有的子組件
      // 移除事件監聽器(wacth等等)
      destroyed () {
        console.log('---destroyed')
      },
      methods: {
        add () {
          console.log('---add')
          this.num++
        }
      }
    })
    app.$mount('#app')
 app.$mount('#app')和el:'#app'都是掛載到真實DOM中。

什麼是虛擬DOM

是一個很大的JSON數據,用於描述視圖模板的,保存在記憶體中。

虛擬DOM存在的價值點

更新,把DOM更新粒度降到最低,規避人為DOM濫操作。

什麼是diff運算

在更新階段,patch對新舊虛擬DOM進行對比,找出臟節點,提交更新。

什麼是MVVM框架

MVVM流程 : M數據層 -> VM虛擬DOM層 -> V視圖層

網頁本質 = M數據層 + V視圖結構

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在SQL Server中有幾種方法可以找到活動的 SQL 連接。讓我們看看一些使用 T-SQL 查詢的簡單快捷的方法。 SP_WHO SP_WHO 是 SQL Server 內置的系統存儲過程, 其他方法相比,SP_WHO 將具有最少的列,但是一種快速列出活動連接的方法。 以下是在 SQL Serv ...
  • 1.selectKey介紹及作用 <selectKey>標簽有如下屬性 resultType:sql返回的java類型 statementType:STATEMENT|PREPARED|CALLABLE三種預設PREPARED keyProperty:列名對應的java屬性名,可逗號分隔 keyCo ...
  • 備份和恢覆命令 備份庫 直接在cmd視窗中直接輸入,結束不需要輸入; mysqldump -h埠號 -u用戶名 -p密碼 資料庫名>備份地址 恢復庫 在cmd視窗中進行 1、連接資料庫 mysql -u用戶名 -p密碼 2、創建資料庫 create database 庫名 3、切換到可用資料庫 u ...
  • 1 Hive基本概念 Hive是一個構建在Hadoop上的數據倉庫框架。最初,Hive是由Facebook開發,後來移交由Apache軟體基金會開發,並作為一個Apache開源項目。 Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供類SQL查詢功能。 其 ...
  • 7月14日,騰訊雲資料庫TDSQL PG版的開源版本(開源代號TBase)迎來又一次重大升級:升級後的TDSQL PG V2.4.0版在2PC事務方面得到優化,易用性大幅提升,具備更強的分散式計算性能。 TDSQL PG版是一款具備HTAP(混合事務分析處理)能力、經過騰訊多年持續投入研發的資料庫產 ...
  • 表tbl有a,b,c三個欄位,其中a是主鍵,b上建了索引,然後編寫sql語句SELECT * FROM tbl WHERE a=1這樣不會產生回表,因為所有的數據在a的索引樹中均能找到SELECT * FROM tbl WHERE b=1這樣就會產生回表,因為where條件是b欄位,那麼會去b的索引 ...
  • 【2022年7月15日,杭州】HUAWEI Developer Day(華為開發者日,簡稱HDD)杭州站拉開帷幕。在數字經濟不斷發展的今天,開發者對圖形圖像的開發需求更加深入和多樣化,從虛擬環境重構到用戶交互再到視覺呈現,開發者對於數字世界存在一個完整的需求鏈條。在HMS Core.Sparkle應 ...
  • 目前很多應用都有身份證、銀行卡一鍵識別功能,但面對各種會員卡、通行證、駕駛證、行駛證等日常生活中經常用到的卡證,因為不同商家的卡號位置,版面樣式各異,所以無法使用類似身份證的專門的身份證識別API,如果要在旅游類App、商超類App等手動輸入卡證號碼,不僅繁瑣還容易出錯,沒有很好的交互體驗。此時,使 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...