Vue3 全面介紹

Vue3(正式名稱為 Vue.js 3)是 Vue.js 前端框架的第三個主要版本,于 2020 年 9 月正式發布。作為對 Vue2 的重大升級,Vue3 在核心架構、性能優化、開發體驗等方面進行了全面重構,同時保持了 Vue 一貫的“漸進式框架”理念,讓開發者可以根據需求逐步采用其新特性。

一、Vue3 的核心改進

1. 全新的響應式系統

Vue3 放棄了 Vue2 中基于?Object.defineProperty?的響應式實現,轉而采用?Proxy?API,帶來以下優勢:

原生支持數組索引和長度的響應式變化,無需像 Vue2 那樣重寫數組方法(如?pushsplice);

支持對象動態添加/刪除屬性的響應式監聽,Vue2 中需通過?Vue.set/this.$set?手動處理;

響應式系統更高效,僅在訪問屬性時建立依賴,而非遞歸遍歷對象所有屬性;

支持?MapSet?等原生集合類型的響應式。

示例:Vue3 中動態添加響應式屬性

import { reactive } from 'vue'
const state = reactive({ name: 'Vue3' })
// 動態添加屬性,自動具備響應式
state.age = 5 
console.log(state.age) // 5(視圖會同步更新)

2. 組合式 API(Composition API)

組合式 API 是 Vue3 的核心特性之一,旨在解決 Vue2 選項式 API(Options API)在大型項目中的痛點:

選項式 API 中,邏輯分散在?datamethodscomputed?等選項中,復雜組件的邏輯難以聚合和用;

組合式 API 允許將相關邏輯(如數據、方法、監聽)封裝在一個函數中,實現“按功能組織代碼”,而非“按選項類型組織代碼”;

支持在多個組件間復用復雜邏輯,無需依賴混入(Mixin),避免混入帶來的命名沖突和邏輯來源不清晰問題。

示例:組合式 API 實現計數器邏輯

import { ref, computed, onMounted } from 'vue'
export default {setup() {// 1. 定義響應式數據const count = ref(0)// 2. 定義計算屬性const doubleCount = computed(() => count.value * 2)// 3. 定義方法const increment = () => {count.value++}// 4. 生命周期鉤子onMounted(() => {console.log('組件掛載完成,初始 count 為', count.value)})// 5. 暴露給模板使用return { count, doubleCount, increment }}
}

3. 更好的 TypeScript 支持

Vue3 從底層使用 TypeScript 重寫,相比 Vue2(需通過聲明文件兼容 TypeScript),提供了更完善的類型推導:

組合式 API 中的?refreactive?等 API 可自動推導數據類型,減少手動定義類型的工作量;

組件的?propsemits?選項支持精確的類型校驗;

支持在模板中進行類型檢查(需配合 Volar 編輯器插件),提前發現類型錯誤。

示例:TypeScript + 組合式 API 定義 props

import { defineProps } from 'vue'
// 定義 props 并指定類型
const props = defineProps<{title: stringcount?: number // 可選屬性isVisible: boolean
}>()
// 使用 props 時自動獲得類型提示
console.log(props.title.length) // 無類型錯誤
console.log(props.count?.toFixed(2)) // 可選鏈語法安全使用

4. 性能優化

Vue3 在編譯和運行時層面進行了多項優化,性能顯著優于 Vue2:

編譯優化:模板編譯時生成更高效的渲染函數,減少虛擬 DOM 的對比次數(如靜態節點提升、補丁標記優化);靜態屬性(如?class="btn")會被提取到渲染函數外部,避免每次渲染時重復創建;條件渲染(v-if)和列表渲染(v-for)的編譯邏輯優化,減少不必要的 DOM 操作。

運行時優化:響應式系統基于?Proxy,減少不必要的依賴追蹤;虛擬 DOM 算法優化,對比時僅關注動態節點,提升更新效率;支持片段(Fragments),組件可返回多個根節點,無需額外包裹?div,減少 DOM 層級。

5. 內置組件與 API 調整

Vue3 對部分內置組件和 API 進行了調整,增強功能或簡化使用:

特性Vue2 情況Vue3 改進
片段(Fragments)組件必須有唯一根節點,需用?div?包裹支持多根節點,無需包裹,編譯時自動處理
v-model語法復雜,需配合?sync?修飾符實現雙向綁定簡化語法,支持多個?v-model,可自定義綁定屬性和事件
Teleport無內置組件,需通過第三方庫實現“組件內容掛載到指定 DOM 位置”內置?<Teleport>?組件,輕松實現彈窗、下拉菜單等場景
Suspense無內置支持,異步組件加載狀態需手動處理內置?<Suspense>?組件,統一管理異步組件的加載、錯誤狀態
生命周期鉤子選項式 API(如?mountedupdated組合式 API 中提供獨立函數(如?onMountedonUpdated),更靈活

二、Vue3 的兩種組件寫法

Vue3 支持兩種組件開發方式,開發者可根據項目需求和團隊習慣選擇:

1. 選項式 API(Options API)

與 Vue2 的寫法兼容,適合簡單組件或習慣選項式開發的開發者。Vue3 對選項式 API 進行了部分兼容優化,確保現有 Vue2 項目可平滑遷移。

2. 單文件組件(SFC)+ 組合式 API

Vue3 推薦的寫法,結合單文件組件(.vue 文件)和組合式 API,適合復雜組件和大型項目。Vue3 還支持?<script setup>?語法糖,進一步簡化組合式 API 的代碼:

無需手動導出組件(export default);

無需在?setup()?函數中返回數據和方法,直接定義即可在模板中使用;

支持自動導入?refcomputed?等 API(需配合構建工具配置)。

三、Vue3 的生態系統

Vue3 發布后,其官方生態工具也已同步升級,確保開發體驗的一致性:

1. 構建工具:Vite

Vite 是 Vue 作者尤雨溪開發的新一代構建工具,相比 Webpack,具有以下優勢:

開發環境啟動速度極快(基于 ES 模塊原生支持,無需打包);

熱更新(HMR)響應迅速,修改代碼后立即生效;

默認支持 Vue3、TypeScript、JSX 等,零配置即可使用;

生產環境基于 Rollup 打包,體積小、性能優。

創建 Vue3 + Vite 項目的命令:

# 使用 npm
npm create vite@latest my-vue3-project -- --template vue
# 進入項目目錄并安裝依賴
cd my-vue3-project
npm install
# 啟動開發服務器
npm run dev

2. 路由:Vue Router 4

Vue Router 4 是 Vue3 的官方路由插件,與 Vue3 深度兼容,主要改進:

支持組合式 API,提供?useRouteruseRoute?等 Hook,方便在 setup 函數中使用路由;

支持路由參數的響應式監聽,無需手動監聽?$route?變化;

優化路由匹配算法,支持動態路由和嵌套路由的更靈活配置。

示例:Vue Router 4 在組合式 API 中的使用

import { useRouter, useRoute } from 'vue-router'
export default {setup() {const router = useRouter()const route = useRoute()// 獲取路由參數console.log(route.params.id)// 跳轉路由const goToHome = () => {router.push('/home')}return { goToHome }}
}

3. 狀態管理:Pinia

Pinia 是 Vue3 官方推薦的狀態管理庫,替代了 Vue2 中的 Vuex,主要優勢:

完全支持 TypeScript,類型推導更完善;

簡化 API,無需?mutations(Pinia 中直接通過?actions?修改狀態,支持同步和異步);

支持組合式 API,可在 setup 函數中輕松使用;

體積更小,性能更優,支持多倉庫(多個 Store)。

示例:創建 Pinia Store 并使用

// 1. 創建 Store(src/stores/counter.js)
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {state: () => ({ count: 0 }),actions: {increment() {this.count++},async incrementAsync() {await new Promise(resolve => setTimeout(resolve, 1000))this.count++}},getters: {doubleCount: (state) => state.count * 2}
})// 2. 在組件中使用
import { useCounterStore } from '@/stores/counter'
import { setup } from 'vue'
export default {setup() {const counterStore = useCounterStore()return {count: counterStore.count,doubleCount: counterStore.doubleCount,increment: counterStore.increment,incrementAsync: counterStore.incrementAsync}

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

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

相關文章

HTTP 范圍請求:為什么你的下載可以“斷點續傳”?

在現代網絡應用中&#xff0c;我們習以為常的功能&#xff0c;如斷點續傳、多線程下載和在線視頻快進快退&#xff0c;都依賴于 HTTP 協議中的一個強大特性&#xff1a;范圍請求&#xff08;Range Requests&#xff09;。這項技術讓客戶端能夠聰明地只請求文件的一部分&#xf…

萬博智云聯合華為云共建高度自動化的云容災基線解決方案

一、摘要 近日&#xff0c;萬博智云與華為云的深入合作再添新章——萬博智云HyperBDR云容災解決方案&#xff0c;順利通過華為云專家團隊評審和認證&#xff0c;正式被選為華為云基線解決方案&#xff08;Baseline Solution&#xff09;&#xff0c;并在華為云國際站上線。 Hy…

機器視覺opencv教程(二):二值化、自適應二值化

文章目錄機器視覺opencv教程&#xff08;二&#xff09;&#xff1a;二值化、自適應二值化一、二值化圖基礎概念二、傳統二值化方法&#xff08;基于全局固定閾值&#xff09;1. 閾值法&#xff08;THRESH_BINARY&#xff09;2. 反閾值法&#xff08;THRESH_BINARY_INV&#xf…

leetcode 461 漢明距離

一、問題描述二、解題思路采用位運算的思想來解決這個問題&#xff0c;首先&#xff0c;將x和y進行異或&#xff0c;x和y對應二進制位不同就會得到1&#xff0c;然后統計所有1的個數&#xff0c;即為漢明距離。三、代碼實現時間復雜度&#xff1a;T(n)O(n)空間復雜度&#xff1…

ClickHouse 客戶端

ClickHouse 客戶端 ClickHouse提供兩種客戶端接口&#xff0c;分別基于 HTTP 和 TCP 協議 基于 HTTP 協議 主要用來支持輕量級的簡單操作&#xff0c;方便跨平臺和編程語言。 測試clickhouse聯通性&#xff1a; $ curl http://localhost:8123/ Ok.在運行狀況檢查腳本中使用…

DBeaver 連接 PostgreSQL 教程

&#x1f6e0;? DBeaver 連接 PostgreSQL 教程1?? 安裝 DBeaver打開官網&#xff1a;https://dbeaver.io/download/下載 Community Edition&#xff08;免費版&#xff09;&#xff0c;選擇對應系統&#xff08;Windows / macOS / Linux&#xff09;。安裝完成后&#xff0c…

Komo Searc-AI驅動的搜索引擎

本文轉載自&#xff1a;Komo Searc-AI驅動的搜索引擎 - Hello123工具導航 ** 一、&#x1f50d; Komo Search 是什么&#xff1f; Komo Search 是一款基于人工智能技術的新一代交互式搜索引擎&#xff0c;它徹底改變了我們獲取信息的方式 —— 從被動檢索變成主動對話。不同于…

HTML 和 JavaScript 關聯的基礎教程

HTML 和 JavaScript 是構建現代網頁的核心技術。HTML 負責頁面結構&#xff0c;JavaScript 負責動態交互。以下是兩者的基本關聯方式。內聯方式&#xff1a;直接在 HTML 中嵌入 JavaScript在 HTML 文件中&#xff0c;可以通過 <script> 標簽直接編寫 JavaScript 代碼。這…

淘寶四個月造了一個超越美團的“美團”

本周三&#xff0c;美團發布最新一季財報&#xff0c;利潤承壓導致股價爆跌。只隔一天&#xff0c;阿里也發布了最新季報&#xff0c;最大的亮點是“淘寶閃購”即時零售業務&#xff0c;日均訂單量站穩8000萬單&#xff0c;峰值訂單更是達到了1.2億單。8000萬單這個數字令市場眼…

Java開發MongoDB常見面試題及答案

基礎概念題1. 什么是MongoDB&#xff1f;它的主要特點是什么&#xff1f;答案&#xff1a; MongoDB是一個開源的NoSQL文檔型數據庫&#xff0c;主要特點包括&#xff1a;文檔存儲&#xff1a;使用BSON格式存儲數據&#xff0c;類似JSON結構無Schema約束&#xff1a;靈活的數據結…

AI視頻生成工具全景對比:元寶AI、即夢AI、清影AI和Vidu AI

AI視頻生成技術正以前所未有的速度發展&#xff0c;成為內容創作領域的重要革新力量。本文將全面對比四款主流AI視頻生成工具&#xff1a;元寶AI、即夢AI、清影AI生視頻和Vidu AI&#xff0c;從公司背景、技術路線、產品特點、發展歷程和市場定位等多個維度進行深入分析。一、基…

2026屆大數據畢業設計選題推薦-基于Python的出行路線規劃與推薦系統 爬蟲數據可視化分析

&#x1f525;作者&#xff1a;it畢設實戰小研&#x1f525; &#x1f496;簡介&#xff1a;java、微信小程序、安卓&#xff1b;定制開發&#xff0c;遠程調試 代碼講解&#xff0c;文檔指導&#xff0c;ppt制作&#x1f496; 精彩專欄推薦訂閱&#xff1a;在下方專欄&#x1…

基于SpringBoot的高校科研項目管理系統【2026最新】

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

【開題答辯全過程】以 在線考試系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

Marin說PCB之POC電路layout設計仿真案例---11

上節文章中大家不知道發現沒有我們RX0_96712_FAKRA_3--TDR結果顯示芯片端口阻抗還是偏低一些&#xff0c;但是這個該如何去改善優化設計呢&#xff1f;因為目前的PCB設計上&#xff0c;RX0_96712_FAKRA_3這個信號在芯片焊盤處是已經做了隔層參考的優化處理了&#xff1a;RX0_96…

【踩坑】修復 clear 報錯 terminals database is inaccessible

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;歡迎[點贊、收藏、關注]哦~ 主要原因&#xff1a;Anaconda3 路徑中的 clear 命令干擾了系統中的 clear 命令。 可能操作&#xff1a;你可能在安裝后將 anaconda 目錄移動了&#…

重學JS-005 --- JavaScript算法與數據結構(五)回顧 DOM 操作

文章目錄style.displayinnerText學到的代碼寫法小總結style.display 使用元素的 style.display 屬性&#xff0c;將屬性的值設置為 “block” 或 “none”&#xff0c;可以顯示或隱藏元素。 resetGameBtn.style.display block; optionsContainer.style.display none;innerT…

ArcGIS:如何設置地圖文檔的相對路徑或者發布為地圖包

設置好的地圖文檔在分享給別人使用或查看時&#xff0c;可能會出現這樣的問題&#xff1a;這是因為地圖文檔里面的數據存儲的是絕對路徑&#xff0c;當別人打開時&#xff0c;地圖文檔無法識別到正確的數據路徑。遇到這樣的問題有三種解決辦法&#xff1a;點擊未能加載的數據&a…

深入解析 Java interrupt

Java 中斷(Interrupt)機制詳解 Java 的中斷機制是一種協作式的線程間通信機制&#xff0c;用于請求另一個線程停止當前正在執行的操作。 Thread thread Thread.currentThread(); thread.interrupt(); // 設置當前線程的中斷狀態 檢查中斷狀態 // 檢查中斷狀態 boolean isI…

SOME/IP-SD事件組訂閱

<摘要> 本文將結合AUTOSAR R22-11版本的《PRS_SOMEIPServiceDiscoveryProtocol》規范&#xff0c;解析SOME/IP-SD協議中的事件組訂閱機制。針對“事件組訂閱”&#xff0c;將從背景概念、設計意圖、實際案例及圖示等角度展開分析&#xff0c;通過通俗易懂的闡述和圖文表格…