vue3項目啟動流程講解

Vue 3 項目啟動流程詳解

Vue 3 項目的啟動流程相比 Vue 2 有了顯著變化,采用了新的應用實例創建方式和組合式 API。下面我將詳細講解 Vue 3 項目的啟動過程,并提供一個可視化演示。

實現思路

  1. 創建 Vue 3 應用實例

  2. 配置根組件和必要的插件

  3. 掛載應用到 DOM

  4. 展示啟動過程中的關鍵步驟

代碼實現

html

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vue 3 啟動流程詳解</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script><style>* {margin: 0;padding: 0;box-sizing: border-box;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;}body {background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);min-height: 100vh;padding: 20px;color: #2c3e50;}.container {max-width: 1200px;margin: 0 auto;padding: 20px;}header {text-align: center;margin-bottom: 40px;padding: 20px;background: white;border-radius: 10px;box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);}h1 {color: #3498db;margin-bottom: 10px;}.subtitle {color: #7f8c8d;font-size: 1.2rem;}.content {display: flex;flex-wrap: wrap;gap: 20px;}.explanation {flex: 1;min-width: 300px;background: white;padding: 25px;border-radius: 10px;box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);}.demo {flex: 1;min-width: 300px;background: white;padding: 25px;border-radius: 10px;box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);}h2 {color: #3498db;margin-bottom: 20px;padding-bottom: 10px;border-bottom: 2px solid #3498db;}.step {margin-bottom: 25px;padding: 15px;border-left: 4px solid #3498db;background: #f8f9fa;border-radius: 0 8px 8px 0;}.step-number {display: inline-block;width: 30px;height: 30px;background: #3498db;color: white;text-align: center;line-height: 30px;border-radius: 50%;margin-right: 10px;}.step-title {font-weight: bold;margin-bottom: 8px;color: #2c3e50;}.code-block {background: #2c3e50;color: #f8f9fa;padding: 15px;border-radius: 8px;margin: 15px 0;overflow-x: auto;font-family: 'Courier New', monospace;}.console {background: #2c3e50;color: #00d0ff;padding: 15px;border-radius: 8px;height: 200px;overflow-y: auto;margin-top: 20px;font-family: 'Courier New', monospace;}.log-entry {margin-bottom: 8px;font-size: 0.9rem;}.timestamp {color: #7f8c8d;margin-right: 10px;}button {background: #3498db;color: white;border: none;padding: 12px 20px;border-radius: 6px;cursor: pointer;font-size: 1rem;margin-top: 15px;transition: background 0.3s;}button:hover {background: #2980b9;}.app-container {margin-top: 20px;padding: 20px;border: 2px dashed #3498db;border-radius: 8px;text-align: center;}.app-title {color: #3498db;margin-bottom: 15px;}.counter {font-size: 2rem;font-weight: bold;color: #2c3e50;margin: 15px 0;}.lifecycle {margin-top: 20px;padding: 15px;background: #e8f4fc;border-radius: 8px;font-size: 0.9rem;}.lifecycle-title {font-weight: bold;margin-bottom: 10px;color: #3498db;}</style>
</head>
<body><div id="app" class="container"><header><h1>Vue 3 項目啟動流程詳解</h1><p class="subtitle">從入口文件到組件渲染的完整過程</p></header><div class="content"><div class="explanation"><h2>啟動流程步驟</h2><div class="step"><span class="step-number">1</span><div class="step-title">創建應用實例</div><p>使用 <code>createApp</code> 函數創建 Vue 應用實例,這是 Vue 3 的新特性,替代了 Vue 2 的 <code>new Vue()</code> 方式。</p><div class="code-block">const app = Vue.createApp({ /* 根組件選項 */ });</div></div><div class="step"><span class="step-number">2</span><div class="step-title">配置應用</div><p>注冊插件、全局組件、指令等。Vue 3 使用應用實例的方法進行配置,而不是全局配置。</p><div class="code-block">app.use(router).use(store); // 注冊路由和狀態管理</div></div><div class="step"><span class="step-number">3</span><div class="step-title">掛載應用</div><p>調用 <code>mount()</code> 方法將應用掛載到 DOM 元素上,返回根組件實例。</p><div class="code-block">const vm = app.mount('#app');</div></div><div class="step"><span class="step-number">4</span><div class="step-title">編譯與渲染</div><p>Vue 編譯模板,創建虛擬 DOM,然后將組件渲染到頁面。</p><div class="code-block">// Vue 內部處理模板編譯和渲染</div></div></div><div class="demo"><h2>啟動過程演示</h2><div class="console" id="console"><div class="log-entry"><span class="timestamp">[00:00:00]</span> 準備初始化 Vue 3 應用...</div></div><button id="start-btn">開始啟動過程</button><div class="app-container"><h3 class="app-title">Vue 應用掛載區域</h3><p>應用狀態: <span id="app-status">未初始化</span></p><div class="counter" id="counter">0</div><button id="increment-btn" disabled>+1</button></div><div class="lifecycle"><div class="lifecycle-title">生命周期狀態</div><div id="lifecycle-status">beforeCreate: 未觸發, created: 未觸發, beforeMount: 未觸發, mounted: 未觸發</div></div></div></div></div><script>// 模擬控制臺輸出const consoleElement = document.getElementById('console');function logToConsole(message) {const now = new Date();const timestamp = `[${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}:${now.getSeconds().toString().padStart(2, '0')}]`;const logEntry = document.createElement('div');logEntry.className = 'log-entry';logEntry.innerHTML = `<span class="timestamp">${timestamp}</span> ${message}`;consoleElement.appendChild(logEntry);consoleElement.scrollTop = consoleElement.scrollHeight;}// 模擬啟動過程document.getElementById('start-btn').addEventListener('click', function() {this.disabled = true;logToConsole('開始創建 Vue 應用實例...');setTimeout(() => {logToConsole('調用 Vue.createApp()...');document.getElementById('app-status').textContent = '創建中';setTimeout(() => {logToConsole('應用實例創建完成');logToConsole('配置應用: 注冊插件和組件...');setTimeout(() => {logToConsole('調用 app.mount("#app")...');document.getElementById('app-status').textContent = '掛載中';// 模擬生命周期setTimeout(() => {logToConsole('生命周期: beforeCreate → created');document.getElementById('lifecycle-status').textContent = 'beforeCreate: 已觸發, created: 已觸發, beforeMount: 未觸發, mounted: 未觸發';setTimeout(() => {logToConsole('生命周期: beforeMount → mounted');document.getElementById('lifecycle-status').textContent = 'beforeCreate: 已觸發, created: 已觸發, beforeMount: 已觸發, mounted: 已觸發';logToConsole('應用掛載完成!');document.getElementById('app-status').textContent = '已掛載';// 啟用計數器按鈕document.getElementById('increment-btn').disabled = false;// 簡單計數器功能let count = 0;const counterElement = document.getElementById('counter');document.getElementById('increment-btn').addEventListener('click', function() {count++;counterElement.textContent = count;logToConsole(`計數器增加: ${count}`);});}, 1000);}, 1000);}, 1000);}, 1000);}, 500);});</script>
</body>
</html>

Vue 3 啟動流程關鍵點

  1. 應用實例創建:Vue 3 使用?createApp()?函數創建應用實例,這種方式避免了 Vue 2 中全局配置的污染問題。

  2. 配置方式變化:所有插件、組件和指令的注冊都通過應用實例的方法進行,而不是全局方法。

  3. 掛載過程mount()?方法替代了 Vue 2 的?$mount(),返回的是根組件實例而不是應用實例。

  4. 性能改進:Vue 3 的啟動速度更快,打包體積更小,這得益于新的編譯器和響應式系統。

  5. 組合式API:Vue 3 引入了組合式 API,提供了更好的邏輯組織和代碼復用能力。

這個示例展示了 Vue 3 項目啟動的關鍵步驟,包括應用實例創建、配置、掛載和渲染過程。通過可視化方式,可以更直觀地理解 Vue 3 應用的初始化流程。

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

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

相關文章

【C++】LLVM-mingw + VSCode:Windows 開發攻略

LLVM-mingw 是一個基于 LLVM 項目的開源工具鏈&#xff0c;用于在類 Unix 系統&#xff08;如 Linux 或 macOS&#xff09;上為 Windows 平臺交叉編譯應用程序&#xff0c;它結合了 LLVM 編譯器基礎設施&#xff08;包括 Clang C/C/Objective-C 編譯器和 LLD 鏈接器&#xff0c…

AI內容標識新規實施后,大廠AI用戶協議有何變化?(六)科大訊飛

科大訊飛也是國產老將&#xff0c;當年OpenAI橫空出世&#xff0c;國內唯有文心和星火能與之一戰&#xff0c;早期效果感覺甚至是優于文心的&#xff0c;只是后面再也沒有什么大動靜出來。訊飛也算大廠了&#xff0c;但跟百度阿里這些老牌互聯網門閥相比&#xff0c;還是不夠持…

Error: MiniProgramError{“errMsg“:“navigateTo:fail webview count limit exceed“}

這個錯誤 "navigateTo:fail webview count limit exceed" 是微信小程序中常見的頁面棧溢出問題&#xff0c;原因是微信小程序對頁面棧深度有默認限制&#xff08;通常為10層&#xff09;&#xff0c;當使用 navigateTo 連續跳轉頁面導致頁面棧超過限制時就會觸發。解…

少即是多:從 MPTCP 看優化干預的邊界

“對待端到端傳輸&#xff0c;信息不足就要少干預&#xff0c;越干預越糟糕”&#xff0c;這是我的信條&#xff0c;這次再來說說 MPTCP。 Linux 內核 MPTCP 最好的調度算法就是 default 算法&#xff0c;沒有之一&#xff0c;因為它以代價最小&#xff0c;最自然的方式做到了保…

“開源AI智能名片鏈動2+1模式S2B2C商城小程序”在直播公屏引流中的應用與效果

摘要&#xff1a;本文聚焦于直播公屏引流場景&#xff0c;探討“開源AI智能名片鏈動21模式S2B2C商城小程序”如何通過技術賦能與模式創新&#xff0c;重構直播電商的流量獲取與轉化路徑。研究結合案例分析與實證數據&#xff0c;揭示該方案在提升用戶互動、優化供應鏈管理、降低…

基于大數據挖掘的藥品不良反應知識整合與利用研究

標題:基于大數據挖掘的藥品不良反應知識整合與利用研究內容:1.摘要 隨著醫療數據的爆炸式增長&#xff0c;大數據挖掘技術在醫療領域的應用日益廣泛。本研究旨在利用大數據挖掘技術對藥品不良反應知識進行整合與利用&#xff0c;以提高藥品安全性監測和管理水平。通過收集多源異…

國產時序數據庫選型指南-從大數據視角看透的價值

摘要&#xff1a;大數據時代時序數據庫崛起&#xff0c;工業物聯網場景下每秒百萬級數據點寫入成為常態。Apache IoTDB憑借單節點1000萬點/秒的寫入性能、毫秒級查詢響應和20:1超高壓縮比脫穎而出&#xff0c;其樹形數據模型完美適配工業設備層級結構。相比傳統數據庫&#xff…

教你使用服務器如何搭建數據庫

數據庫是存儲和管理數據的核心組件&#xff0c;無論是網站、應用還是企業系統&#xff0c;都離不開數據庫的支持。本文將以 萊卡云服務器 為例&#xff0c;教你如何快速搭建常用數據庫服務。一、準備工作服務器環境推薦操作系統&#xff1a;Ubuntu 20.04 / Debian 11 / CentOS …

西門子 S7-200 SMART PLC 核心指令詳解:從移位、上升沿和比較指令到流水燈控制程序實戰

對于 PLC 初學者來說&#xff0c;“流水燈” 是繞不開的經典入門案例 —— 它看似簡單&#xff0c;卻濃縮了 PLC 編程的核心邏輯&#xff1a;初始化、時序控制、指令應用與狀態判斷。今天我們就以 S7-200 SMART 為例&#xff0c;逐行拆解一段 8 位流水燈控制程序&#xff0c;帶…

P4342 [IOI 1998] Polygon -普及+/提高

P4342 [IOI 1998] Polygon 題目描述 題目可能有些許修改&#xff0c;但大意一致。 Polygon 是一個玩家在一個有 nnn 個頂點的多邊形上玩的游戲&#xff0c;如圖所示&#xff0c;其中 n4n 4n4。每個頂點用整數標記&#xff0c;每個邊用符號 &#xff08;加&#xff09;或符號 *…

枚舉算法和排序算法能力測試

枚舉算法題目 1&#xff1a;找出 1-20 中既是偶數又是 3 的倍數的數題目描述&#xff1a;小明想找出 1 到 20 中既能被 2 整除又能被 3 整除的數字&#xff0c;幫他列出來吧。 代碼&#xff1a;cpp運行#include <iostream> using namespace std; int main() {int a;for (…

大數據電商流量分析項目實戰:Hadoop初認識+ HA環境搭建(二)

?博客主頁&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客內容》&#xff1a;大數據、Java、測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 &#x1f4e2;博客專欄&#xff1a; https://blog.csdn.net/m0_63815035/…

【Linux】Linux進程概念(上)

一、馮諾依曼體系結構我們常見的計算機&#xff0c;如筆記本。我們不常見的計算機&#xff0c;如服務器。它們大部分都遵守馮諾依曼體系。截至目前&#xff0c;我們所認識的計算機&#xff0c;都是由一個個硬件組件組成。輸入單元&#xff1a;鍵盤、鼠標、掃描儀、寫板等中央處…

GESP C++ 一~二級拓展課(一)

課題及解析建議用時60分鐘&#xff0c;作業及講解建議用時50分鐘。 課題及解析&#xff1a; 4003&#xff1a;【GESP2303二級】畫三角形 【題目描述】 輸入一個正整數 n&#xff0c;請使用大寫字母拼成一個這樣的三角形圖案&#xff08;參考樣例輸入輸出&#xff09;&#xff…

Kubernetes Ingress:使用 Apache APISIX 進行外部流量路由

什么是 Ingress&#xff1f; 在 Kubernetes 中&#xff0c;隨著微服務架構的廣泛應用&#xff0c;集群中的服務需要暴露到外部&#xff0c;以便供用戶或其他服務訪問。如何高效、安全地管理這些流量&#xff0c;成為了一個重要的議題。Ingress 作為 Kubernetes 提供的一種資源&…

Elasticsearch的理解與使用

在大數據與云計算時代&#xff0c;“高效檢索” 與 “實時分析” 成為業務突破的關鍵能力。Elasticsearch&#xff08;簡稱 ES&#xff09;作為一款開源分布式搜索與分析引擎&#xff0c;憑借其低延遲、高可擴、強靈活的特性&#xff0c;已成為日志分析、全文檢索、業務監控等場…

利用FFmpeg自動批量處理m4s文件

緩存了一些視頻m4s文件&#xff0c;只能用指定的軟件打開&#xff0c;網上查了一下&#xff0c;需要去掉m4s文件開頭的9個0&#xff0c;還要用FFmpeg將兩個文件合并成一個文件。 經仔細研究緩存目錄和其中文件&#xff0c;發現以下特點&#xff1a;“緩存目錄”中有很多“數字文…

MLLM學習~M3-Agent Prompt學習

Prompt “輸入→處理→輸出→評估” 全流程 Prompt 并非孤立存在&#xff0c;形成了完整的視頻理解鏈路&#xff1a; 視頻原始數據&#xff08;語音 / 圖像&#xff09;→ 模塊 1&#xff08;提取語音 綁定人物 ID&#xff09;→ 模塊 2&#xff08;生成情景記憶描述&#xff…

Ubuntu 20.04安裝顯卡驅動、CUDA、Miniconda和Pytorch(2025.06最新)-Ubuntu從零搭建深度學習環境

文章目錄一、安裝顯卡驅動1.1 查看顯卡型號1.2 根據顯卡型號選擇驅動1.3 獲取下載鏈接1.4 查看下載的顯卡驅動安裝文件1.5 更新軟件列表和安裝必要軟件、依賴1.6 卸載原有驅動1.7 禁用默認驅動1.8 安裝lightdm顯示管理器1.9 停止顯示服務器1.10 在文本界面中&#xff0c;禁用X-…

PyCharm 連接 AutoDL 遠程服務器

實驗室的電腦性能不行了&#xff0c;所以想著租一臺服務器&#xff0c;然后還想使用PyCharm在本地編程&#xff0c;因此就查找相關資料&#xff0c;這里記錄一下配置過程&#xff0c;方便以后查閱。 PyCharm 連接 AutoDL 遠程服務器PyCharm 連接服務器上傳數據集到服務器運行代…