2025 vue3面試題匯總,通俗易懂

一、基礎概念與核心特性

1. Vue3 相比 Vue2 的改進(通俗版)

問題:Vue3 比 Vue2 好在哪?
答案

  • 更快
    • Proxy 代理:Vue2 的響應式像“逐個監聽保險箱”(每個屬性單獨監聽),Vue3 的 Proxy 像“直接監控整個房間”(監聽整個對象變化)。
    • 編譯優化:Vue3 在編譯階段標記哪些是動態內容(如 {{ count }}),更新時跳過靜態內容(如純文字)。
  • 更小:通過 Tree-shaking(搖樹優化),只打包你用到的功能,減少代碼體積。
  • 更好用
    • Composition API:像搭積木一樣組合邏輯(比如把“計數器邏輯”抽成函數,多個組件復用)。
    • 新組件
      • <Teleport>:把組件渲染到任意位置(比如彈窗放到 body 下,避免被父組件樣式影響)。
      • <Suspense>:優雅處理異步加載(比如數據加載時顯示 Loading 動畫)。

2. Composition API vs Options API(場景對比)

問題:為什么要用 Composition API?
答案

  • Options API(Vue2 風格)

    • 把代碼按類型分塊(data、methods、生命周期),適合簡單組件。
    • 缺點:邏輯分散,比如一個“搜索功能”的 data、methods 可能分布在多處。
    // Options API 示例  
    export default {  data() { return { keyword: '' } },  methods: { search() { ... } },  mounted() { this.search() }  
    }  
    
  • Composition API(Vue3 風格)

    • setup() 中,按功能組織代碼(比如把搜索相關的數據、方法寫在一起)。
    • 優點:邏輯復用更方便(類似 React Hooks)。
    // Composition API 示例  
    export default {  setup() {  const keyword = ref('');  const search = () => { ... };  onMounted(search);  return { keyword, search };  }  
    }  
    

二、響應式原理(手繪理解)

3. Vue3 的響應式原理

問題:Vue3 如何實現數據變化自動更新視圖?
答案

  • Proxy 代理對象

    • 當你修改數據時,Proxy 會“攔截”操作(比如 obj.a = 1),通知視圖更新。
    • 對比 Vue2:Vue2 使用 Object.defineProperty,無法監聽新增屬性和數組下標變化(必須用 this.$set)。
  • 代碼模擬(簡化版):

    function reactive(obj) {  return new Proxy(obj, {  get(target, key) {  console.log('讀取了', key);  return Reflect.get(target, key);  },  set(target, key, value) {  console.log('更新了', key);  return Reflect.set(target, key, value);  }  });  
    }  
    const obj = reactive({ a: 1 });  
    obj.a = 2; // 觸發 set 攔截,更新視圖  
    

4. refreactive 的區別(買菜比喻)

問題:什么時候用 ref?什么時候用 reactive
答案

  • ref

    • 用于包裝 基本類型(數字、字符串等),因為 Proxy 無法直接監聽基本類型。
    • 使用方式:必須通過 .value 訪問(就像買菜用袋子裝,取菜要打開袋子)。
    const count = ref(0);  
    console.log(count.value); // 0  
    count.value++;  
    
  • reactive

    • 用于包裝 對象/數組,可以直接訪問屬性(就像直接拿菜籃子,不用拆包裝)。
    const user = reactive({ name: '張三' });  
    console.log(user.name); // 張三  
    user.name = '李四';  
    
  • 總結

    • 簡單值用 ref,復雜對象用 reactive
    • 如果不想寫 .value,可以用 toRefs 解構對象(見下文)。

toRefs 是 Vue 3 中用于處理響應式對象的重要工具函數,主要用于將 reactive 對象轉換為普通對象,同時確保每個屬性都保持響應性。這在解構響應式對象或將其屬性傳遞給子組件時非常有用。

使用場景

  1. 解構響應式對象:直接解構 reactive 對象會失去響應性,而使用 toRefs 可以避免這一問題。
  2. 組件間通信:通過 toRefs 將響應式數據傳遞給子組件,確保數據在傳遞過程中仍能保持響應性。

基本用法

import { reactive, toRefs } from 'vue';const state = reactive({foo: 1,bar: 2,
});const stateRefs = toRefs(state);
// stateRefs 的每個屬性都是 ref 對象,修改它們的值會觸發視圖更新stateRefs.foo.value++; // 視圖會自動更新

示例代碼

解構并保持響應性
<template><div><p>Foo: {{ foo }}</p><p>Bar: {{ bar }}</p><button @click="incrementFoo">Increment Foo</button></div>
</template><script>
import { reactive, toRefs } from 'vue';export default {setup() {const state = reactive({foo: 1,bar: 2,});const { foo, bar } = toRefs(state);function incrementFoo() {foo.value++;}return {foo,bar,incrementFoo,};},
};
</script>
在組合式 API 中使用
import { reactive, toRefs } from 'vue';function useCounter() {const state = reactive({count: 0,});function increment() {state.count++;}return {...toRefs(state),increment,};
}

注意事項

  • 訪問方式:返回的對象屬性是 ref 對象,在 JavaScript 中需通過 .value 訪問;模板中則無需 .value
  • 適用范圍:僅適用于 reactive 對象,不支持普通對象或 ref 對象。
  • 性能影響:大量屬性可能帶來一定性能開銷。

總結而言,toRefs 提供了一種便捷的方式來處理響應式對象,尤其在需要解構或傳遞響應式數據時,能夠有效簡化邏輯并保持數據的響應性。

三、進階 API 與實戰技巧

5. watchwatchEffect(場景區分)

問題:監聽數據變化用哪個?
答案

  • watch

    • 明確監聽某個數據,適合精確控制(比如監聽搜索關鍵詞變化,觸發請求)。
    watch(  keyword,  (newVal) => { fetchData(newVal) },  { immediate: true } // 立即執行一次  
    );  
    
  • watchEffect

    • 自動追蹤依賴,適合副作用操作(比如根據多個數據變化更新 DOM)。
    watchEffect(() => {  console.log('關鍵詞和頁碼變化了:', keyword.value, page.value);  fetchData();  
    });  
    

6. 組件通信:Provide/Inject(跨層級傳參)

問題:爺爺組件如何直接傳數據給孫子組件?
答案

  • 步驟
    1. 爺爺組件用 provide 提供數據。
    2. 孫子組件用 inject 獲取數據。
  • 代碼示例
    // 爺爺組件  
    import { provide } from 'vue';  
    setup() {  provide('theme', 'dark'); // 提供數據  
    }  // 孫子組件  
    import { inject } from 'vue';  
    setup() {  const theme = inject('theme', 'light'); // 第二個參數是默認值  return { theme };  
    }  
    

四、性能優化(通俗策略)

7. 如何讓 Vue3 應用更快?

答案

  • 代碼層面

    • 使用 v-once 標記靜態內容(只渲染一次)。
    • v-memo 緩存動態組件(比如表格行,只有 ID 變化時才重新渲染)。
    <div v-for="item in list" :key="item.id" v-memo="[item.id]">  {{ item.name }}  
    </div>  
    
  • 打包優化

    • 按需引入組件庫(比如 Element Plus 只導入用到的 Button、Input)。
    • 使用異步組件(懶加載),減少首屏代碼體積。
    // 異步加載組件  
    const AsyncComponent = defineAsyncComponent(() => import('./MyComponent.vue'));  
    

五、高頻面試代碼片段

8. 自定義指令:點擊外部關閉彈窗

場景:點擊彈窗外部區域關閉彈窗。
代碼

// 全局指令 v-click-outside  
app.directive('click-outside', {  mounted(el, { value: callback }) {  el.handler = (e) => {  if (!el.contains(e.target)) callback();  };  document.addEventListener('click', el.handler);  },  unmounted(el) {  document.removeEventListener('click', el.handler);  }  
});  // 使用  
<template>  <div v-click-outside="closeModal">彈窗內容</div>  
</template>  

六、項目經驗(回答技巧)

9. 如何回答“封裝通用組件”?

示例

  • 場景:封裝一個表單組件,支持校驗和提交。
  • 步驟
    1. 通過 props 接收表單配置(如字段規則)。
    2. 使用 v-model 綁定每個輸入項的值。
    3. 暴露 validate() 方法供父組件調用。
    4. 使用插槽(slot)允許自定義布局。
    <template>  <form @submit.prevent="submit">  <slot></slot>  <button type="submit">提交</button>  </form>  
    </template>  
    <script>  
    export default {  methods: {  validate() { /* 校驗邏輯 */ },  submit() { this.$emit('submit'); }  }  
    }  
    </script>  
    

總結

以上內容通過通俗比喻、實際場景和代碼示例,拆解了 Vue3 的核心知識點。建議邊學邊寫代碼實踐,結合 Vue3 官方文檔 查漏補缺!

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

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

相關文章

第5章:在LangChain中如何使用AI Services

這篇文章詳細介紹了 LangChain4j 中的 AI Services 概念&#xff0c;展示了如何通過高層次的抽象來簡化與大語言模型&#xff08;LLM&#xff09;的交互。AI Services 的核心思想是隱藏底層復雜性&#xff0c;讓開發者專注于業務邏輯&#xff0c;同時支持聊天記憶、工具調用和 …

二叉樹(數據結構)

二叉樹 二叉樹也是用過遞歸定義的結構 先序遍歷又稱前序遍歷 ?? ?? 按照先序遍歷的方法去手算處理這個二叉樹 ?? 先A B C 再 A B D E C&#xff08;也就是把B換成BDE再放進去&#xff09; 再 A B D E C F 看這個插入的方法要掌握像二叉樹這樣向一個…

機器學習筆記——常用損失函數

大家好&#xff0c;這里是好評筆記&#xff0c;公主號&#xff1a;Goodnote&#xff0c;專欄文章私信限時Free。本筆記介紹機器學習中常見的損失函數和代價函數&#xff0c;各函數的使用場景。 熱門專欄 機器學習 機器學習筆記合集 深度學習 深度學習筆記合集 文章目錄 熱門…

Wireshark使用介紹

文章目錄 Wireshark介紹Wireshark使用工作模式介紹1. 混雜模式&#xff08;Promiscuous Mode&#xff09;2. 普通模式&#xff08;Normal Mode&#xff09;3. 監視模式&#xff08;Monitor Mode&#xff09; 界面分區捕獲過濾器語法基本語法邏輯運算符高級語法使用示例捕獲過濾…

#滲透測試#批量漏洞挖掘#暢捷通T+SQL注入漏洞

免責聲明 本教程僅為合法的教學目的而準備,嚴禁用于任何形式的違法犯罪活動及其他商業行為,在使用本教程前,您應確保該行為符合當地的法律法規,繼續閱讀即表示您需自行承擔所有操作的后果,如有異議,請立即停止本文章讀。 目錄 一、漏洞全景解析 1. 高危漏洞案例庫 2.…

【小游戲】C++控制臺版本俄羅斯輪盤賭

制作團隊&#xff1a;洛谷813622&#xff08;Igallta&#xff09; 989571&#xff08;_ayaka_&#xff09; Mod&#xff1a;_ayaka_ 雙人模式&#xff1a;Igallta 公告&#xff1a; 原先的9.8改名為 Alpha 1.0&#xff0c;以后每次更新都增加 0.1。 Alpha 1.11 改為 Beta 1…

nvm安裝、管理node多版本以及配置環境變量【保姆級教程】

引言 不同的項目運行時可能需要不同的node版本才可以運行&#xff0c;由于來回進行卸載不同版本的node比較麻煩&#xff1b;所以需要使用node工程多版本管理。 本人在配置時&#xff0c;通過網絡搜索教程&#xff0c;由于文章時間過老&#xff0c;或者文章的互相拷貝導致配置時…

框架--Mybatis3

一.特殊符號處理 < < > > " &quot; &apos; & &amp; 除了可以使用上述轉義字符外&#xff0c;還可以使<![CDATA[ ]]>用來包裹特殊字符。 二.mybatis 一級緩存二級緩存 1.為什么緩存 緩存&#xff1a;數據緩存&#xf…

純新手教程:用llama.cpp本地部署DeepSeek蒸餾模型

0. 前言 llama.cpp是一個基于純C/C實現的高性能大語言模型推理引擎&#xff0c;專為優化本地及云端部署而設計。其核心目標在于通過底層硬件加速和量化技術&#xff0c;實現在多樣化硬件平臺上的高效推理&#xff0c;同時保持低資源占用與易用性。 最近DeepSeek太火了&#x…

Netty入門詳解

引言 Netty 是一個基于 Java 的高性能、異步事件驅動的網絡應用框架&#xff0c;用于快速開發可維護的高性能網絡服務器和客戶端。它提供了一組豐富的 API&#xff0c;使得開發人員能夠輕松地處理各種網絡協議&#xff0c;如 TCP、UDP 等&#xff0c;并且支持多種編解碼方式&a…

物聯網簡介集合

物聯網&#xff08;IoT&#xff09;指的是物理設備&#xff08;如電器和車輛&#xff09;之間的互聯互通。這些設備嵌入了軟件、傳感器和連接功能&#xff0c;使其能夠相互連接并交換數據。這項技術實現了從龐大的設備網絡中收集和共享數據&#xff0c;為打造更高效、自動化的系…

【分布式理論11】分布式協同之分布式事務(一個應用操作多個資源):從剛性事務到柔性事務的演進

文章目錄 一. 什么是分布式事務&#xff1f;二. 分布式事務的挑戰三. 事務的ACID特性四. CAP理論與BASE理論1. CAP理論1.1. 三大特性1.2. 三者不能兼得 2. BASE理論 五. 分布式事務解決方案1. 兩階段提交&#xff08;2PC&#xff09;2. TCC&#xff08;Try-Confirm-Cancel&…

【Quest開發】全身跟蹤

軟件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最終效果&#xff1a;能像meta的操作室沉浸場景一樣根據頭盔移動來推斷用戶姿勢&#xff0c;實現走路、蹲下、手勢匹配等功能 需要借助UnityMovement這個包 GitHub …

AI全棧開發_人工智能AI大模型 Prompt提示詞工程詳解(全方位介紹及運用)

AI引領的第四次工業革命正席卷而來&#xff0c;如何精準把握這一歷史性的機遇&#xff0c;將成為我們這一代人不容忽視且需深入思考與積極行動的重要課題。未來幾年AI將會像計算機一樣快速普及&#xff0c;面對這一歷史性的第一波紅利&#xff0c;你是否已準備好把握機遇&#…

小米平板怎么和電腦共享屏幕

最近嘗試使用小米平板和電腦屏幕分屏互聯 發現是需要做特殊處理的&#xff0c;需要下載一款電腦安裝包&#xff1a;小米妙享 關于這個安裝包&#xff0c;想吐槽的是&#xff1a; 沒有找到官網渠道&#xff0c;是通過其他網絡方式查到下載的 不附錄鏈接&#xff0c;原因是因為地…

java | MyBatis-plus映射和golang映射對比

文章目錄 Java實體類和數據庫的映射1.默認駝峰命名規則2.自定義字段映射3.關閉駝峰命名規則4.JSON序列化映射 Golang1. 結構體與表的映射2. 字段與列的映射3. 關聯關系映射4. 其他映射相關標簽 這篇也是做數據庫映射方面的對比&#xff1a; Java 實體類和數據庫的映射 1.默認…

訊方·智匯云校華為官方授權培訓機構

1.官方授權 訊方智匯云校是華為領先級授權培訓機構&#xff08;華為授權培訓合作伙伴&#xff08;HALP&#xff09;體系&#xff0c;分為認證、優選、領先三個等級&#xff0c;領先級是HALP最高級&#xff09;&#xff0c;代表著華為對培訓合作伙伴在專業能力、師資隊伍、合作…

避免踩雷!CUDA與Anaconda兼容性配置完全手冊

CUDA與Anaconda深度學習環境配置指南 目錄 核心概念解析安裝場景分析版本沖突處理最佳實踐指南常見問題解答 核心概念解析 1. 組件對比表 組件作用域包含內容查看方式NVIDIA驅動系統級GPU底層通信支持nvidia-smiCUDA Toolkit系統級完整開發工具鏈(nvcc等)nvcc --versioncon…

掌握.NET Core后端發布流程,如何部署后端應用?

無論你是剛接觸.NET Core的新手還是已有經驗的開發者&#xff0c;在這篇文章中你將會學習到一系列實用的發布技巧與最佳實踐&#xff0c;幫助你高效順利地將.NET Core后端應用部署到生產環境中 目錄 程序發布操作 Docker容器注冊表 文件夾發布 導入配置文件 網站運行操作 …

一周學會Flask3 Python Web開發-request請求對象與url傳參

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程&#xff1a; 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili request請求對象封裝了從客戶端發來的請求報文信息&#xff0c;我們可以從中獲取所有數據。 request對象包含的常用屬性&…