最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端Vue3最常用的?20?道面試題總結(jié)(含詳細(xì)解釋和代碼示例)

 更新時(shí)間:2026年05月28日 10:05:19   作者:全棧前端老曹  
Vue3作為當(dāng)前前端主流框架,其核心特性、底層原理及生態(tài)工具是面試中的高頻考點(diǎn),這篇文章主要介紹了前端Vue3最常用的20道面試題(含詳細(xì)解釋和代碼示例)的相關(guān)資料,需要的朋友可以參考下

前言

以下是老曹關(guān)于 Vue 3 最常用的 20 道面試題總結(jié),涵蓋 Vue 3 的核心特性如 Composition API、響應(yīng)式系統(tǒng)(ref / reactive)、生命周期鉤子、組件通信、Teleport、Suspense、自定義指令等高頻知識(shí)點(diǎn)。每道題都配有詳細(xì)解釋和代碼示例,適合用于前端開發(fā)崗位的 Vue 3 技術(shù)面試準(zhǔn)備,大家可以碼住隨時(shí)翻出來查閱背誦和練習(xí)!

1. Vue 3 和 Vue 2 的區(qū)別是什么?

問題: 解釋 Vue 3 相比 Vue 2 的主要改進(jìn)點(diǎn)。(最主要,不是全部,全部后續(xù)老曹會(huì)再擴(kuò)展)

答案:

特性Vue 2Vue 3
響應(yīng)式系統(tǒng)Object.definePropertyProxy
架構(gòu)單一源碼模塊化架構(gòu)(Tree-shakable)
Composition API??
Fragment??
Suspense 組件??
自定義渲染器支持有限更靈活
支持 TypeScript?(需額外配置)? 原生支持
// Vue 3 示例:使用 Composition API
import { ref, onMounted } from 'vue';

export default {
  setup() {
    const count = ref(0);
    function increment() {
      count.value++;
    }
    onMounted(() => {
      console.log('組件掛載');
    });
    return { count, increment };
  }
};

2. 如何在 Vue 3 中創(chuàng)建一個(gè)響應(yīng)式對(duì)象?

問題: 使用 reactive() 創(chuàng)建一個(gè)響應(yīng)式用戶對(duì)象。

答案:
使用 reactive() 創(chuàng)建深層響應(yīng)式對(duì)象。

import { reactive } from 'vue';

const user = reactive({
  name: 'Alice',
  age: 25
});

3.ref()和reactive()的區(qū)別?

問題: 寫出兩者的不同點(diǎn)及適用場(chǎng)景。

答案:

  • ref():適用于基本類型或單個(gè)值。
  • reactive():適用于對(duì)象或復(fù)雜結(jié)構(gòu)。
import { ref, reactive } from 'vue';

const count = ref(0); // 基本類型
const user = reactive({ name: 'Bob' }); // 對(duì)象

count.value++; // 必須用 .value
user.name = 'Tom'; // 不需要 .value

4. Vue 3 中如何監(jiān)聽數(shù)據(jù)變化?

問題: 使用 watchEffectwatch 的方式分別寫出監(jiān)聽邏輯。

答案:

  • watchEffect:自動(dòng)追蹤依賴并執(zhí)行副作用。
  • watch:手動(dòng)指定監(jiān)聽的目標(biāo)。
import { ref, watchEffect, watch } from 'vue';

const count = ref(0);

// watchEffect
watchEffect(() => {
  console.log('Count changed:', count.value);
});

// watch
watch(count, (newVal, oldVal) => {
  console.log(`從 ${oldVal} 變?yōu)?${newVal}`);
});

5. Vue 3 的生命周期鉤子有哪些?如何使用?

問題:setup() 中使用 onMounted 生命周期鉤子。

答案:
Vue 3 提供了與 Vue 2 類似的生命周期鉤子,但必須從 vue 導(dǎo)入使用。

import { onMounted } from 'vue';

export default {
  setup() {
    onMounted(() => {
      console.log('組件已掛載');
    });
  }
};

6. Vue 3 中如何進(jìn)行父子組件通信?

問題: 父組件向子組件傳遞數(shù)據(jù),并觸發(fā)事件。

答案:
使用 props接收父組件數(shù)據(jù),使用 emit 觸發(fā)事件。

// 子組件 Child.vue
export default {
  props: ['title'],
  emits: ['update'],
  setup(props, { emit }) {
    function handleClick() {
      emit('update', 'New Value');
    }
    return { handleClick };
  }
};

// 父組件 Parent.vue
<template>
  <Child :title="msg" @update="handleUpdate" />
</template>

<script>
import Child from './Child.vue';

export default {
  components: { Child },
  data() {
    return {
      msg: 'Hello'
    };
  },
  methods: {
    handleUpdate(value) {
      console.log('收到更新:', value);
    }
  }
};
</script>

7. Vue 3 的setup()函數(shù)的作用是什么?

問題: setup() 是什么?為什么它很重要?

答案:

  • setup() 是 Vue 3 Composition API 的入口函數(shù)。
  • 替代 Vue 2 中的 data、methods、computed 等選項(xiàng)。
  • 更好地組織邏輯復(fù)用和模塊化代碼。
export default {
  setup() {
    const message = ref('Hello Vue 3');
    function changeMessage() {
      message.value = 'Updated!';
    }
    return { message, changeMessage };
  }
};

8. Vue 3 中如何實(shí)現(xiàn)響應(yīng)式計(jì)算屬性?

問題: 使用 computed() 實(shí)現(xiàn)一個(gè)計(jì)算屬性。

答案:
使用 computed() 創(chuàng)建響應(yīng)式計(jì)算屬性。

import { ref, computed } from 'vue';

export default {
  setup() {
    const firstName = ref('John');
    const lastName = ref('Doe');

    const fullName = computed(() => `${firstName.value} ${lastName.value}`);

    return { firstName, lastName, fullName };
  }
};

9.provide()和inject()的作用是什么?

問題: 如何跨層級(jí)傳遞數(shù)據(jù)?

答案:
用于祖先組件向后代組件注入依賴,不通過 props 逐層傳遞。

// 祖先組件
import { provide, ref } from 'vue';

export default {
  setup() {
    const theme = ref('dark');
    provide('theme', theme);
    return { theme };
  }
};

// 后代組件
import { inject } from 'vue';

export default {
  setup() {
    const theme = inject('theme');
    return { theme };
  }
};

10. Vue 3 中如何使用插槽(Slot)?

問題: 實(shí)現(xiàn)一個(gè)默認(rèn)插槽和具名插槽。

答案:

<!-- 父組件 -->
<template>
  <Card>
    <template #default>這是默認(rèn)插槽內(nèi)容</template>
    <template #header>這是頭部插槽</template>
  </Card>
</template>

<!-- 子組件 Card.vue -->
<template>
  <div class="card">
    <header><slot name="header"></slot></header>
    <main><slot></slot></main>
  </div>
</template>

11. Vue 3 中的Teleport有什么用途?

問題: 如何將模態(tài)框渲染到 <body> 下?

答案:
Teleport 可以將組件渲染到 DOM 中任意位置。

<template>
  <teleport to="body">
    <div v-if="showModal" class="modal">這是一個(gè)模態(tài)框</div>
  </teleport>
</template>

12. Vue 3 中的Suspense是什么?怎么用?

問題: 異步加載組件時(shí)顯示加載狀態(tài)。

答案:
Suspense 是一個(gè)內(nèi)置組件,用于處理異步依賴。

<template>
  <suspense>
    <template #default>
      <AsyncComponent />
    </template>
    <template #fallback>
      加載中...
    </template>
  </suspense>
</template>
<script>
const AsyncComponent = defineAsyncComponent(() => import('./MyComponent.vue'));
</script>

13. Vue 3 中的defineProps和defineEmits是什么?

問題:<script setup> 中如何聲明 props 和 emits?

答案:
<script setup> 中直接使用 definePropsdefineEmits。

<script setup>
import { defineProps, defineEmits } from 'vue';

const props = defineProps(['title']);
const emit = defineEmits(['update']);

function updateTitle() {
  emit('update', 'New Title');
}
</script>

<template>
  <h1>{{ title }}</h1>
  <button @click="updateTitle">更新標(biāo)題</button>
</template>

14. Vue 3 中如何動(dòng)態(tài)綁定樣式?

問題: 動(dòng)態(tài)設(shè)置背景顏色。

答案:
使用 :style 綁定對(duì)象。

<template>
  <div :style="{ backgroundColor: color }">{{ text }}</div>
</template>

<script>
export default {
  data() {
    return {
      color: 'lightblue',
      text: '動(dòng)態(tài)樣式'
    };
  }
};
</script>

15. Vue 3 中如何注冊(cè)全局組件?

問題: 注冊(cè)一個(gè)可全局使用的按鈕組件。

答案:

// main.js
import { createApp } from 'vue';
import App from './App.vue';
import MyButton from './components/MyButton.vue';

const app = createApp(App);
app.component('MyButton', MyButton);
app.mount('#app');
<!-- 使用 -->
<template>
  <my-button label="提交" />
</template>

16. Vue 3 中如何實(shí)現(xiàn)自定義指令?

問題: 實(shí)現(xiàn)一個(gè)高亮指令 v-highlight

答案:

// main.js
import { createApp } from 'vue';
import App from './App.vue';

const app = createApp(App);

app.directive('highlight', {
  mounted(el) {
    el.style.backgroundColor = '#f0e68c';
  }
});

app.mount('#app');
<!-- 使用 -->
<template>
  <p v-highlight>這段文字被高亮了</p>
</template>

17. Vue 3 中的nextTick()怎么用?

問題: 修改 DOM 后等待更新完成。

答案:
使用 nextTick() 確保 DOM 更新完成后執(zhí)行操作。

import { nextTick } from 'vue';

async function updateData() {
  this.message = '更新后的內(nèi)容';
  await nextTick();
  console.log('DOM 已更新');
}

18. Vue 3 中如何實(shí)現(xiàn)組件懶加載?

問題: 使用異步組件實(shí)現(xiàn)路由懶加載。

答案:
使用 defineAsyncComponent 實(shí)現(xiàn)懶加載。

import { defineAsyncComponent } from 'vue';

const AsyncComponent = defineAsyncComponent(() =>
  import('./components/LazyComponent.vue')
);

export default {
  components: {
    AsyncComponent
  }
};

19. Vue 3 中的emitter是什么?如何使用?

問題: 實(shí)現(xiàn)非父子組件之間的通信。

答案:
使用第三方庫如 mittEventBus 實(shí)現(xiàn)全局通信。

npm install mitt
// eventBus.js
import mitt from 'mitt';
export const emitter = mitt();

// 發(fā)送事件
import { emitter } from './eventBus';
emitter.emit('update', 'Hello');

// 接收事件
import { emitter } from './eventBus';
emitter.on('update', (msg) => {
  console.log(msg);
});

20. Vue 3 中如何使用v-model實(shí)現(xiàn)雙向綁定?

問題: 實(shí)現(xiàn)一個(gè)輸入框組件的雙向綁定。

答案:
使用 modelValue + update:modelValue。

<template>
  <input
    :value="modelValue"
    @input="$emit('update:modelValue', $event.target.value)"
  />
</template>

<script>
export default {
  props: ['modelValue'],
  emits: ['update:modelValue']
};
</script>

總結(jié)表格

編號(hào)題目描述知識(shí)點(diǎn)示例代碼常見考察點(diǎn)
1Vue3 與 Vue2 的區(qū)別架構(gòu)升級(jí)Proxy, Composition API框架理解
2創(chuàng)建響應(yīng)式對(duì)象reactive()reactive({})數(shù)據(jù)綁定
3ref() vs reactive()響應(yīng)式機(jī)制ref(0) vs reactive({})數(shù)據(jù)封裝
4數(shù)據(jù)監(jiān)聽watchEffect, watchwatch(count, () => {...})數(shù)據(jù)驅(qū)動(dòng)
5生命周期鉤子onMounted, onUpdatedonMounted(() => {})組件控制
6組件通信[props]/ emitdefineProps(['name'])組件設(shè)計(jì)
7setup() 的作用Composition API 入口setup() { return {} }邏輯組織
8計(jì)算屬性computed()computed(() => a + b)響應(yīng)式優(yōu)化
9跨級(jí)傳參provide/injectprovide('theme', 'dark')數(shù)據(jù)共享
10插槽使用默認(rèn)插槽 / 具名插槽<slot name="header" />組件擴(kuò)展
11Teleport 的用途渲染到其他節(jié)點(diǎn)<teleport to="body">...</teleport>DOM 結(jié)構(gòu)優(yōu)化
12Suspense 的用途異步加載<suspense><template #default>...異步組件
13<script setup> 中的 [props]/ emit快捷方式defineProps(['title'])新語法糖
14動(dòng)態(tài)綁定樣式:style:style="{ color: textColor }"樣式控制
15全局組件注冊(cè)component()app.component('MyButton', Button)組件復(fù)用
16自定義指令directive()app.directive('highlight', { mounted: ... })擴(kuò)展能力
17nextTick() 的用途DOM 更新監(jiān)聽await nextTick()渲染流程控制
18組件懶加載異步組件defineAsyncComponent(() => import(...))性能優(yōu)化
19全局事件通信mittemitter.on('event', fn)跨組件通信
20v-model 的實(shí)現(xiàn)雙向綁定modelValue, update:modelValue表單組件設(shè)計(jì)

高頻考點(diǎn)補(bǔ)充

考點(diǎn)描述
Composition API替代 Options API,提升邏輯復(fù)用
Reactivity APIref, reactive, toRefs, watch, computed
Teleport / Portal渲染到任意 DOM 節(jié)點(diǎn)
Fragment支持多個(gè)根節(jié)點(diǎn)
TypeScript 支持完整 TS 類型推導(dǎo)
Custom Renderer可定制渲染器(如 Canvas、SSR)
性能優(yōu)化更小的體積、更快的 Diff 算法
組合函數(shù)(Composable)封裝可復(fù)用邏輯
Vue 3 的編譯器優(yōu)化Block Tree、Patch Flags
Vue 3 的生態(tài)支持Vite、Pinia、Vue Router 4、Element Plus

到此這篇關(guān)于前端Vue3最常用的20道面試題總結(jié)的文章就介紹到這了,更多相關(guān)前端Vue3道面試題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue.js實(shí)現(xiàn)的幻燈片功能示例

    vue.js實(shí)現(xiàn)的幻燈片功能示例

    這篇文章主要介紹了vue.js實(shí)現(xiàn)的幻燈片功能,結(jié)合實(shí)例形式分析了vue.js實(shí)現(xiàn)幻燈片的相關(guān)樣式、配置、功能等操作技巧,需要的朋友可以參考下
    2019-01-01
  • antd-DatePicker組件獲取時(shí)間值,及相關(guān)設(shè)置方式

    antd-DatePicker組件獲取時(shí)間值,及相關(guān)設(shè)置方式

    這篇文章主要介紹了antd-DatePicker組件獲取時(shí)間值,及相關(guān)設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue3中輕松實(shí)現(xiàn)switch功能組件的全過程

    vue3中輕松實(shí)現(xiàn)switch功能組件的全過程

    這篇文章主要給大家介紹了關(guān)于vue3中輕松實(shí)現(xiàn)switch功能組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • vue結(jié)合leaflet實(shí)現(xiàn)熱力圖

    vue結(jié)合leaflet實(shí)現(xiàn)熱力圖

    本文主要介紹了vue實(shí)現(xiàn)熱力圖,結(jié)合leaflet.heat插件可以很容易的做出熱力圖,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • vue3的定時(shí)器cron組件詳解

    vue3的定時(shí)器cron組件詳解

    該文章介紹了如何在Vue3和Antd-Vue中實(shí)現(xiàn)一個(gè)定時(shí)任務(wù)調(diào)度組件,該組件支持每日定時(shí)任務(wù),并返回cron格式的字符串,父組件調(diào)用該組件后,會(huì)得到一個(gè)cron格式的時(shí)間字符串,表示任務(wù)的執(zhí)行時(shí)間,例如,“000009***”表示每天的9點(diǎn)
    2025-10-10
  • Vue利用axios發(fā)送請(qǐng)求并代理請(qǐng)求的實(shí)現(xiàn)代碼

    Vue利用axios發(fā)送請(qǐng)求并代理請(qǐng)求的實(shí)現(xiàn)代碼

    在Web開發(fā)中,跨域問題是一個(gè)常見難題,通常由瀏覽器的同源策略引起,通過簡(jiǎn)單配置vue.config.js文件,以及安裝axios依賴,即可實(shí)現(xiàn)前后端的無縫連接和數(shù)據(jù)交換,這種方法簡(jiǎn)便有效,對(duì)于處理跨域請(qǐng)求問題非常實(shí)用
    2024-10-10
  • 五分鐘理解keep?alive用法及原理

    五分鐘理解keep?alive用法及原理

    這篇文章主要為大家介紹了keep?alive用法及原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Vue出現(xiàn)彈出層時(shí)禁止底部頁面跟隨滑動(dòng)

    Vue出現(xiàn)彈出層時(shí)禁止底部頁面跟隨滑動(dòng)

    本文主要介紹了Vue出現(xiàn)彈出層時(shí)禁止底部頁面跟隨滑動(dòng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • vue非父子組件通信問題及解決方法

    vue非父子組件通信問題及解決方法

    這篇文章主要介紹了vue非父子組件通信問題及解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Vue的自定義事件之組件通信工具詳解

    Vue的自定義事件之組件通信工具詳解

    這篇文章主要介紹了Vue的自定義事件之組件通信工具詳解,Vue的自定義事件(Custom Events)是一種強(qiáng)大的工具,用于實(shí)現(xiàn)組件之間的通信和數(shù)據(jù)傳遞,本文將深入探討什么是Vue的自定義事件,以及如何自定義和使用它們,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

松原市| 兴仁县| 沙洋县| 德兴市| 荔浦县| 西林县| 金坛市| 大丰市| 隆尧县| 始兴县| 绍兴县| 石景山区| 航空| 铁岭县| 蓝山县| 年辖:市辖区| 武陟县| 彝良县| 连江县| 田东县| 合川市| 伊川县| 商河县| 前郭尔| 尼木县| 牟定县| 林西县| 清镇市| 株洲市| 巧家县| 乐平市| 太保市| 改则县| 浏阳市| 泰来县| 太仆寺旗| 奉化市| 济源市| 晋宁县| 湟源县| 罗平县|