【前端小小白的學習之路】面試題之(vue生命周期)

来源:http://www.cnblogs.com/luxiaoxing/archive/2017/09/13/7516229.html
-Advertisement-
Play Games

在面試的時候,vue生命周期被考察的很頻繁。 什麼是vue生命周期呢? Vue實例有一個完整的生命周期,也就是從開始創建、初始化數據、編譯模板、掛載Dom、渲染→更新→渲染、卸載等一系列過程,我們稱這是Vue的生命周期。通俗說就是Vue實例從創建到銷毀的過程,就是生命周期。 在Vue的整個生命周期中 ...


在面試的時候,vue生命周期被考察的很頻繁。

什麼是vue生命周期呢?

Vue實例有一個完整的生命周期,也就是從開始創建、初始化數據、編譯模板、掛載Dom、渲染→更新→渲染、卸載等一系列過程,我們稱這是Vue的生命周期。通俗說就是Vue實例從創建到銷毀的過程,就是生命周期。

在Vue的整個生命周期中,提供了一系列的事件,可以註冊JavaScript方法,達到控制整個過程的目的,在這些JavaScript方法中的this直接指向的是vue的實例

在Vue的整個生命周期中,實例可以調用一些生命周期鉤子的函數,這提供了執行自定義邏輯的機會。給予用戶機會在一些特定的場景下添加他們自己的代碼。

生命周期鉤子的函數又是哪些呢?請看下圖中紅色方框標註的都是生命周期鉤子函數。

Vue提供的生命周期鉤子如下:

① beforeCreate

在實例初始化之後,數據觀測(data observer,開始監控Data對象數據變化)和初始化事件(init event,Vue內部初始化事件)之前被調用。

② created

在實例已經創建完成之後被調用。實例已完成以下的配置:數據觀測(data observer),屬性和方法的運算,event事件回調。掛載階段尚未開始,$el 屬性不可見。

③ beforeMount

在掛載開始之前被調用。相關的render函數首次被調用。實例已完成以下的配置:編譯模板,把data裡面的數據和模板生成html。註意此時還沒有掛載html到頁面上。

④ mounted

在el 被新創建的 vm.$el 替換,並掛載到實例上去之後調用。實例已完成以下的配置:用上面編譯好的html內容替換el屬性指向的DOM對象。此時模板中的html渲染到了html頁面中,此時一般可以做一些Ajax操作。註意mounted只會執行一次。

⑤ beforeUpdate

在數據更新之前調用,發生在虛擬DOM重新渲染和打補丁之前。可以在該鉤子中進一步地更改狀態,不會觸發附加的重渲染過程。

⑥ updated

在由於數據更改導致的虛擬DOM重新渲染和打補丁之後調用。調用時,組件DOM已經更新,所以可以執行依賴於DOM的操作。然而在大多數情況下,應該避免在此期間更改狀態,因為這可能會導致更新無限迴圈。該鉤子在伺服器端渲染期間不被調用。

⑦ beforeDestroy

在實例銷毀之前調用。實例仍然完全可用。

⑧ destroyed

在實例銷毀之後調用。調用後,所有的事件監聽器會被移除,所有的子實例也會被銷毀。該鉤子在伺服器端渲染期間不被調用。

先用created這個生命周期鉤子函數舉個小慄子,請看下麵代碼:

    window.onload = () => {
        new Vue({
            data: {
                name: "Tom"
            },
            created: function () {
                console.log(this.name) //this指向vm實例。列印結果:Tom
            }
        })
    }

下圖說明瞭實例的生命周期。你不需要立馬弄明白所有的東西,不過隨著你的不斷學習和使用,它的參考價值會越來越高。

再來個完整的慄子,如下:

<!DOCTYPE html>
<html>

<head>
    <title></title>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>
</head>

<body>
    <div id="app">
        <p>{{ message }}</p>
    </div>
    <script type="text/javascript">
        var app = new Vue({
            el: '#app',
            data: {
                message: "Vue生命周期學習理解"
            },
            beforeCreate: function () {
                console.group('beforeCreate 創建前狀態');
                console.log("%c%s", "color:red", "el     : " + this.$el);
                console.log("%c%s", "color:red", "data   : " + this.$data);
                console.log("%c%s", "color:red", "message: " + this.message)
            },
            created: function () {
                console.group('created 創建完畢狀態');
                console.log("%c%s", "color:red", "el     : " + this.$el);
                console.log("%c%s", "color:red", "data   : " + this.$data);
                console.log("%c%s", "color:red", "message: " + this.message);
            },
            beforeMount: function () {
                console.group('beforeMount 掛載前狀態');
                console.log("%c%s", "color:red", "el     : " + (this.$el));
                console.log(this.$el);
                console.log("%c%s", "color:red", "data   : " + this.$data);
                console.log("%c%s", "color:red", "message: " + this.message);
            },
            mounted: function () {
                console.group('mounted 掛載結束狀態');
                console.log("%c%s", "color:red", "el     : " + this.$el);
                console.log(this.$el);
                console.log("%c%s", "color:red", "data   : " + this.$data);
                console.log("%c%s", "color:red", "message: " + this.message);
            },
            beforeUpdate: function () {
                console.group('beforeUpdate 更新前狀態');
                console.log("%c%s", "color:red", "el     : " + this.$el);
                console.log(this.$el);
                console.log("%c%s", "color:red", "data   : " + this.$data);
                console.log("%c%s", "color:red", "message: " + this.message);
            },
            updated: function () {
                console.group('updated 更新完成狀態');
                console.log("%c%s", "color:red", "el     : " + this.$el);
                console.log(this.$el);
                console.log("%c%s", "color:red", "data   : " + this.$data);
                console.log("%c%s", "color:red", "message: " + this.message);
            },
            beforeDestroy: function () {
                console.group('beforeDestroy 銷毀前狀態');
                console.log("%c%s", "color:red", "el     : " + this.$el);
                console.log(this.$el);
                console.log("%c%s", "color:red", "data   : " + this.$data);
                console.log("%c%s", "color:red", "message: " + this.message);
            },
            destroyed: function () {
                console.group('destroyed 銷毀完成狀態');
                console.log("%c%s", "color:red", "el     : " + this.$el);
                console.log(this.$el);
                console.log("%c%s", "color:red", "data   : " + this.$data);
                console.log("%c%s", "color:red", "message: " + this.message)
            }
        })
    </script>
</body>

</html>

列印出來的結果請看下圖;

關於生命周期參考博文:http://www.cnblogs.com/fly_dragon/p/6220273.html

關於Vue系列學習教程參考博文:http://www.cnblogs.com/ghostwu/p/7359055.html


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

-Advertisement-
Play Games
更多相關文章
  • 1、對象集合 cells[] 返回包含表格中所有單元格的一個數組 rows[] 返回包含表格中所有行的一個數組 tBodies[] 返回包含表格中所有tbody的一個數組(主包含ty和td) 2、對象屬性 border 設置或返回表格邊框的寬度 caption 對錶格的caption元素的引用 ce ...
  • 最近搞Canvas繪圖,知道了JavaScript中提供了atan2(y,x)這樣一個三角函數。乍眼一看,不認識,畢竟在高中時,學過的三角函數有:sin,cos,arcsin,arccos,tan,arctan等,並沒有這個。而工作中又需要用到它,所以這裡就做了個簡單的瞭解。 何時需要用到 atan ...
  • gitHub地址 https://github.com/Webxiaoyaun/vue-book/tree/master/vue-book 點擊去Github下載 ## 一個書城## 有增加,修改,緩存,懶載入,node.js寫的後臺,動畫過渡,輪播圖 等功能 ...
  • 前面的話 Vue 的過渡系統提供了非常多簡單的方法設置進入、離開和列表的動效。那麼對於數據元素本身的動效呢?包括數字和運算、顏色的顯示、SVG 節點的位置、元素的大小和其他的屬性等。所有的原始數字都被事先存儲起來,可以直接轉換到數字。做到這一步,我們就可以結合 Vue 的響應式和組件系統,使用第三方 ...
  • html界面 css代碼 靜態網頁效果圖 jQuery實現 實現定時器效果 實現懸浮效果 實現移開效果 JS腳本實現 實現定時器效果 懸浮效果 移開效果 效果圖 ...
  • 什麼是cookie? cookie 是存儲於訪問者的電腦中的變數。每當同一臺電腦通過瀏覽器請求某個頁面時,就會發送這個 cookie。你可以使用 JavaScript 來創建和取回 cookie 的值。 設置cookie 每個cookie都是一個名/值對,可以把下麵這樣一個字元串賦值給docum ...
  • 本文記錄的是筆者最近抽私下時間給朋友做的一個時時彩自動下註系統,比較簡單,主要也是為了學習一下node.js。 其實邏輯沒什麼可以深談的,主要是想說說這套代碼結構。結構如下圖: js的代碼比較難以維護,不清楚大家對於這點是否認同,但這裡筆者只說自己的感受,筆者的朋友一開始找到筆者,說玩時時彩,一直盯 ...
  • 適用:h5+jquery,移動網頁最佳 最近在寫個簡單的公眾號頁面,前端驗證時有些信息要提示,很簡單的需求實在不想找啥現成的輪子,又不至於用alert這麼粗暴,遂寫了個非常簡單的消息框,效果如圖: 特點: 有黑層遮罩 點擊消失,無論是點消息框還是外面 用法: 歡迎吐槽或推薦更好的方案。 -end- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...