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

適合中高級前端vue面試的100道題目及解析

 更新時(shí)間:2026年07月04日 15:15:53   作者:前端小白一枚~  
這篇文章主要介紹了適合中高級前端vue面試的100道題目及解析,這份100道真實(shí)面試題解析,從Vue2和Vue3響應(yīng)式原理、虛擬DOM?diff算法到性能優(yōu)化與工程化,需要的朋友可以參考下

以下是 100 道 Vue 高級面試題及解析,涵蓋 Vue2、Vue3 核心原理、性能優(yōu)化、工程化等關(guān)鍵知識點(diǎn),適合中高級前端面試準(zhǔn)備:

一、Vue 核心原理(20 題)

  1. Vue 的響應(yīng)式原理是什么?Vue2 和 Vue3 有何區(qū)別?
    解析:

    • Vue2:基于Object.defineProperty劫持對象屬性的gettersetter,實(shí)現(xiàn)數(shù)據(jù)響應(yīng)式。缺陷:無法監(jiān)聽對象新增 / 刪除屬性、數(shù)組索引 / 長度變化(需通過重寫數(shù)組方法實(shí)現(xiàn))。
    • Vue3:基于Proxy代理整個(gè)對象,可監(jiān)聽對象新增 / 刪除屬性、數(shù)組變化,且無需初始化時(shí)遞歸遍歷所有屬性,性能更優(yōu)。同時(shí)使用Reflect統(tǒng)一操作對象,更符合 ES 規(guī)范。
  2. Vue 中的虛擬 DOM(VNode)是什么?作用是什么?
    解析:虛擬 DOM 是用 JavaScript 對象描述真實(shí) DOM 的結(jié)構(gòu)(如tag、props、children等)。作用:

    • 減少 DOM 操作:通過對比新舊 VNode 差異(diff 算法),只更新變化的部分,降低瀏覽器重繪 / 重排成本。
    • 跨平臺:VNode 可渲染到不同平臺(瀏覽器 DOM、小程序、Canvas 等)。
  3. Vue 的 diff 算法原理是什么?有哪些優(yōu)化策略?
    解析:diff 算法用于對比新舊 VNode 樹,找出差異并更新 DOM。

    • 核心策略:同層比較(不跨層級對比),通過key標(biāo)識節(jié)點(diǎn)唯一性。
    • 優(yōu)化點(diǎn):
      • 若節(jié)點(diǎn)tag不同,直接銷毀舊節(jié)點(diǎn)創(chuàng)建新節(jié)點(diǎn)。
      • 若節(jié)點(diǎn)tagkey相同,視為同一節(jié)點(diǎn),僅更新屬性和子節(jié)點(diǎn)。
      • 列表對比時(shí),key避免節(jié)點(diǎn)復(fù)用錯(cuò)誤(如輸入框內(nèi)容錯(cuò)亂)。
  4. Vue 的生命周期鉤子有哪些?分別在什么階段執(zhí)行?
    解析:

    • Vue2:beforeCreate(實(shí)例創(chuàng)建前,數(shù)據(jù)未初始化)→ created(實(shí)例創(chuàng)建后,數(shù)據(jù)可用,未掛載)→ beforeMount(掛載前,模板編譯完成)→ mounted(掛載完成,可操作 DOM)→ beforeUpdate(數(shù)據(jù)更新前)→ updated(數(shù)據(jù)更新后)→ beforeDestroy(實(shí)例銷毀前)→ destroyed(實(shí)例銷毀后)。
    • Vue3:組合式 API 中用onBeforeMountonMounted等替代,生命周期鉤子注冊時(shí)機(jī)更靈活,且beforeDestroy/destroyed改為onBeforeUnmount/onUnmounted。
  5. Vue 組件通信方式有哪些?適用場景是什么?
    解析:

    • 父子通信:props(父傳子)、$emit/v-on(子傳父)、$parent/$children(直接訪問,不推薦)。
    • 跨級 / 兄弟通信:provide/inject(依賴注入)、EventBus(事件總線,Vue3 推薦用mitt庫)、Vuex/Pinia(狀態(tài)管理)。
    • 復(fù)雜場景:Vuex/Pinia(全局狀態(tài))、$attrs/$listeners(透傳屬性和事件)。
  6. computedwatch的區(qū)別及使用場景?
    解析:

    • computed:依賴響應(yīng)式數(shù)據(jù),緩存結(jié)果(依賴不變則不重新計(jì)算),適用于衍生數(shù)據(jù)計(jì)算(如購物車總價(jià))。
    • watch:監(jiān)聽數(shù)據(jù)變化,可執(zhí)行異步操作,適用于數(shù)據(jù)變化后的副作用(如數(shù)據(jù)變化后請求接口)。
    • 注意:computed不能直接修改,watch可通過handler執(zhí)行任意操作。
  7. Vue 中的key有什么作用?為什么不能用索引作為key?
    解析:key是節(jié)點(diǎn)的唯一標(biāo)識,用于 diff 算法識別相同節(jié)點(diǎn)。

    • 若用索引作為key,當(dāng)列表刪除 / 插入元素時(shí),索引會(huì)變化,導(dǎo)致 diff 算法誤判節(jié)點(diǎn)復(fù)用(如輸入框內(nèi)容錯(cuò)亂)。
    • 推薦用唯一 ID 作為key(如后端返回的id),確保節(jié)點(diǎn)標(biāo)識穩(wěn)定。
  8. Vue 的nextTick原理及使用場景?
    解析:nextTick用于在 DOM 更新完成后執(zhí)行回調(diào)。

    • 原理:利用瀏覽器的微任務(wù)(Promise.then)或宏任務(wù)(setTimeout)延遲執(zhí)行回調(diào),等待當(dāng)前同步代碼執(zhí)行完畢及 DOM 更新完成。
    • 場景:修改數(shù)據(jù)后立即操作更新后的 DOM(如獲取元素高度、滾動(dòng)位置)。
  9. Vue2 中的$set和 Vue3 中的ref/reactive如何解決響應(yīng)式問題?
    解析:

    • Vue2:Object.defineProperty無法監(jiān)聽對象新增屬性,this.$set(obj, key, value)可手動(dòng)觸發(fā)響應(yīng)式。
    • Vue3:ref用于基本類型,reactive用于對象 / 數(shù)組,基于Proxy自動(dòng)監(jiān)聽新增 / 刪除屬性,無需手動(dòng)處理。
  10. Vue 的模板編譯過程是什么?
    解析:模板→AST(抽象語法樹)→渲染函數(shù)→VNode→DOM。

    • 解析:將模板字符串解析為 AST(識別指令、插值等)。
    • 優(yōu)化:標(biāo)記靜態(tài)節(jié)點(diǎn)(不隨數(shù)據(jù)變化的節(jié)點(diǎn)),diff 時(shí)跳過對比。
    • 生成:將 AST 轉(zhuǎn)換為render函數(shù)(返回 VNode 的函數(shù))。
  11. Vue 中的mixins有什么問題?Vue3 的composition API如何解決?
    解析:mixins問題:命名沖突、依賴關(guān)系不明確、復(fù)用邏輯分散。
    Vue3 的composition APIsetupref、reactive等)通過邏輯組合替代mixins,將相關(guān)邏輯封裝在函數(shù)中,實(shí)現(xiàn)更清晰的代碼組織和復(fù)用。

  12. Vue3 的composition API和 Vue2 的options API有什么區(qū)別?
    解析:

    • options API:按data、methods、computed等選項(xiàng)組織代碼,邏輯分散在不同選項(xiàng)中,復(fù)雜組件難以維護(hù)。
    • composition API:按功能邏輯組織代碼(如表單邏輯、列表邏輯),通過setup函數(shù)集中編寫,支持邏輯復(fù)用和類型推斷。
  13. Vue3 的reactiveref的區(qū)別及使用場景?
    解析:

    • reactive:用于對象 / 數(shù)組,返回代理對象,訪問時(shí)無需.value,但不能直接賦值新對象(會(huì)失去響應(yīng)性)。
    • ref:用于基本類型(也可用于對象),返回帶有value屬性的響應(yīng)式對象,訪問 / 修改需通過.value,賦值新值仍保持響應(yīng)性。
    • 場景:基本類型用ref,對象 / 數(shù)組用reactive(或ref包裹對象)。
  14. Vue 中的v-model原理是什么?如何自定義v-model
    解析:v-model是語法糖,本質(zhì)是value屬性 + input事件的結(jié)合。

    • 原生元素:<input v-model="val">等價(jià)于<input :value="val" @input="val = $event.target.value">。
    • 自定義組件:默認(rèn)通過props: ['value']$emit('input', newValue)實(shí)現(xiàn),可通過model選項(xiàng)修改(如model: { prop: 'checked', event: 'change' })。
  15. Vue 的keep-alive組件作用是什么?如何使用?
    解析:keep-alive用于緩存組件實(shí)例,避免重復(fù)創(chuàng)建和銷毀,提升性能。

    • 用法:包裹動(dòng)態(tài)組件<keep-alive><component :is="view"></component></keep-alive>。
    • 屬性:include(緩存指定組件)、exclude(排除指定組件)、max(最大緩存數(shù)量)。
    • 生命周期:被緩存組件會(huì)觸發(fā)activated(激活時(shí))和deactivated(失活時(shí))鉤子。
  16. Vue 中的slot(插槽)有哪些類型?如何使用?
    解析:

    • 匿名插槽:<slot></slot>,父組件通過默認(rèn)內(nèi)容填充。
    • 具名插槽:<slot name="header"></slot>,父組件用<template #header>指定填充。
    • 作用域插槽:<slot :user="user"></slot>,父組件可訪問子組件數(shù)據(jù)(#default="scope")。
      用途:實(shí)現(xiàn)組件內(nèi)容的靈活定制(如表格列自定義、彈窗內(nèi)容定制)。
  17. Vue2 和 Vue3 的v-ifv-for優(yōu)先級有何不同?
    解析:

    • Vue2:v-for優(yōu)先級高于v-if,即先循環(huán)后判斷(可能導(dǎo)致性能問題)。
    • Vue3:v-if優(yōu)先級高于v-for,v-if無法訪問v-for的變量(需在外層嵌套template處理)。
      建議:避免在同一元素上同時(shí)使用v-forv-if,可通過計(jì)算屬性過濾數(shù)據(jù)。
  18. Vue 的自定義指令有哪些鉤子?如何實(shí)現(xiàn)一個(gè)自定義指令?
    解析:自定義指令鉤子(Vue3):createdbeforeMount、mountedbeforeUpdate、updated、beforeUnmount、unmounted。
    示例(實(shí)現(xiàn)自動(dòng)聚焦指令v-focus):

    const focus = {
      mounted(el) { el.focus() }
    }
    app.directive('focus', focus)
  • Vue3 的Teleport組件作用是什么?
    解析:Teleport用于將組件內(nèi)容渲染到指定 DOM 節(jié)點(diǎn)(如body),解決樣式隔離和層級問題。
    場景:彈窗、下拉菜單等組件,避免被父組件overflow: hiddenz-index影響。
    用法:<teleport to="body"><div>彈窗內(nèi)容</div></teleport>。

  • Vue 的依賴收集原理是什么?
    解析:當(dāng)組件渲染時(shí),會(huì)觸發(fā)響應(yīng)式數(shù)據(jù)的getter,此時(shí)將當(dāng)前組件的Watcher實(shí)例收集到該數(shù)據(jù)的依賴列表中(dep)。當(dāng)數(shù)據(jù)變化時(shí),setter會(huì)通知dep中的所有Watcher觸發(fā)組件重新渲染。這是 Vue 響應(yīng)式的核心機(jī)制。

二、Vuex/Pinia(15 題)

  1. Vuex 的核心概念有哪些?各自的作用是什么?
    解析:

    • state:存儲全局狀態(tài)(唯一數(shù)據(jù)源)。
    • getters:派生狀態(tài)(類似computed,緩存結(jié)果)。
    • mutations:修改state的唯一途徑,同步操作(必須是純函數(shù))。
    • actions:處理異步操作,通過commit調(diào)用mutations。
    • modules:將 store 拆分為模塊(解決單一狀態(tài)樹過大問題)。
  2. Vuex 中mutationsactions的區(qū)別?
    解析:

    • 同步 vs 異步:mutations只能執(zhí)行同步操作,actions可執(zhí)行異步操作(如 API 請求)。
    • 調(diào)用方式:mutations通過store.commit調(diào)用,actions通過store.dispatch調(diào)用。
    • 修改狀態(tài):actions不能直接修改state,必須通過commit調(diào)用mutations
  3. Vuex 的modulenamespaced: true的作用是什么?
    解析:開啟命名空間后,模塊內(nèi)的mutationsactions、getters會(huì)被限定在模塊內(nèi),避免全局命名沖突。調(diào)用時(shí)需指定模塊路徑(如commit('user/login'))。

  4. 如何在組件中訪問 Vuex 的stategetters?
    解析:

    • 直接訪問:this.$store.state.xxx、this.$store.getters.xxx。
    • 輔助函數(shù):mapState、mapGetters(簡化代碼):
      import { mapState, mapGetters } from 'vuex'
      computed: {
        ...mapState(['count']),
        ...mapGetters(['doubleCount'])
      }
  5. Vuex 的持久化方案有哪些?
    解析:Vuex 狀態(tài)默認(rèn)存儲在內(nèi)存中,刷新頁面會(huì)丟失。解決方案:

    • 手動(dòng)存儲:在mutations中用localStorage/sessionStorage保存。
    • 插件:vuex-persistedstate(自動(dòng)將指定狀態(tài)同步到本地存儲)。
  6. Vuex 存在哪些缺點(diǎn)?
    解析:

    • 寫法繁瑣(需定義mutations、actions等)。
    • 類型支持差(Vue2 中難以實(shí)現(xiàn) TypeScript 類型推斷)。
    • 模塊化復(fù)雜(命名空間配置繁瑣)。
    • 不適用于小型項(xiàng)目(過度設(shè)計(jì))。
  7. Pinia 和 Vuex 的區(qū)別是什么?為什么說 Pinia 是 Vuex 的替代品?
    解析:Pinia 是 Vue 官方推薦的狀態(tài)管理庫,解決了 Vuex 的缺點(diǎn):

    • 簡化 API:無需mutations,直接在actions中修改狀態(tài)。
    • 更好的 TypeScript 支持:天然支持類型推斷。
    • 無需命名空間:模塊本身就是獨(dú)立的,默認(rèn)支持模塊嵌套。
    • 更簡潔的語法:用defineStore定義倉庫,調(diào)用更直觀。
  8. Pinia 的核心概念有哪些?
    解析:

    • defineStore:定義倉庫(參數(shù)包括id、stategetters、actions)。
    • state:存儲狀態(tài)(函數(shù)返回對象,支持直接修改)。
    • getters:派生狀態(tài)(支持緩存和訪問其他 getters)。
    • actions:處理同步 / 異步操作(可直接修改state)。
  9. Pinia 中如何修改state?
    解析:

    • 直接修改:store.count++(Pinia 允許直接修改 state,無需mutations)。
    • 批量修改:store.$patch({ count: 10, name: 'foo' })store.$patch((state) => { state.count++ })。
    • actions中修改:actions: { increment() { this.count++ } }。
  10. Pinia 如何實(shí)現(xiàn)模塊間通信?
    解析:在一個(gè)模塊的actions中,可直接導(dǎo)入并使用其他模塊的倉庫:

    import { useUserStore } from './user'
    export const useCartStore = defineStore('cart', {
      actions: {
        addItem(item) {
          const userStore = useUserStore()
          if (userStore.isLogin) {
            this.items.push(item)
          }
        }
      }
    })
  11. Vuex/Pinia 的getters是否可以異步?
    解析:

    • Vuex 的getters是同步的(基于state派生,無法處理異步)。
    • Pinia 的getters默認(rèn)同步,但可返回Promise實(shí)現(xiàn)異步(需在組件中用await獲?。?/li>
  12. 如何在 Vue3 的setup中使用 Vuex 和 Pinia?
    解析:

    • Vuex:import { useStore } from 'vuex'const store = useStore(),通過store.state訪問。
    • Pinia:import { useStore } from './stores',const store = useStore(),直接調(diào)用store的屬性和方法。
  13. Vuex 的strict模式有什么作用?
    解析:strict: true開啟嚴(yán)格模式后,任何未通過mutations修改state的操作都會(huì)報(bào)錯(cuò),有助于規(guī)范代碼(生產(chǎn)環(huán)境建議關(guān)閉,避免性能損耗)。

  14. Pinia 如何實(shí)現(xiàn)狀態(tài)持久化?
    解析:

    • 手動(dòng)實(shí)現(xiàn):在actions中用localStorage保存,state初始化時(shí)讀取。
    • 插件:pinia-plugin-persistedstate(配置簡單,支持指定字段持久化)。
  15. Vuex 和 Pinia 在大型項(xiàng)目中如何組織目錄結(jié)構(gòu)?
    解析:

    • Vuex:按模塊拆分,每個(gè)模塊包含state.js、mutations.js、actions.jsgetters.js,根目錄index.js整合。
    • Pinia:每個(gè)倉庫單獨(dú)一個(gè)文件(如user.js、cart.js),根目錄index.js導(dǎo)出所有倉庫。

三、Vue Router(15 題)

  1. Vue Router 的核心概念有哪些?
    解析:routes(路由配置)、router(路由實(shí)例)、route(當(dāng)前路由信息)、router-link(導(dǎo)航組件)、router-view(路由出口)。

  2. Vue Router 的兩種模式(hashhistory)有何區(qū)別?
    解析:

    • hash模式:URL 帶#(如http://xxx/#/home),#后的內(nèi)容不發(fā)送到服務(wù)器,兼容性好(支持所有瀏覽器)。
    • history模式:URL 無#(如http://xxx/home),依賴 HTML5 的historyAPI,需服務(wù)器配置(避免刷新 404),美觀但兼容性稍差(IE10+)。
  3. 如何配置嵌套路由?
    解析:在routes配置中,通過children屬性定義子路由,子路由路徑一般不加/(相對父路由)。

    const routes = [
      {
        path: '/user',
        component: User,
        children: [
          { path: 'profile', component: UserProfile }, // 匹配 /user/profile
          { path: 'posts', component: UserPosts }      // 匹配 /user/posts
        ]
      }
    ]
  4. Vue Router 的動(dòng)態(tài)路由匹配如何實(shí)現(xiàn)?如何獲取參數(shù)?
    解析:用:param定義動(dòng)態(tài)參數(shù)(如path: '/user/:id')。

    • 獲取參數(shù):this.$route.params(Vue2)或route.params(Vue3setup中)。
    • 注意:動(dòng)態(tài)路由參數(shù)變化時(shí),組件不會(huì)重新創(chuàng)建,需用watch監(jiān)聽$route.params或使用beforeRouteUpdate導(dǎo)航守衛(wèi)。
  5. 如何實(shí)現(xiàn)路由跳轉(zhuǎn)?有哪些方式?
    解析:

    • 聲明式:<router-link to="/home">首頁</router-link>(自動(dòng)渲染為<a>標(biāo)簽)。
    • 編程式:this.$router.push('/home')(Vue2)或router.push('/home')(Vue3),支持路徑字符串、對象({ path: '/home' })或命名路由({ name: 'Home' })。
  6. 路由守衛(wèi)有哪些類型?各自的作用是什么?
    解析:

    • 全局守衛(wèi):beforeEach(路由跳轉(zhuǎn)前)、beforeResolve(組件解析后)、afterEach(路由跳轉(zhuǎn)后)。
    • 路由獨(dú)享守衛(wèi):beforeEnter(僅作用于當(dāng)前路由)。
    • 組件內(nèi)守衛(wèi):beforeRouteEnter(進(jìn)入組件前)、beforeRouteUpdate(路由參數(shù)變化時(shí))、beforeRouteLeave(離開組件前)。
      用途:權(quán)限控制、登錄驗(yàn)證、頁面離開提示等。
  7. beforeRouteEnter中為什么不能直接訪問this?如何解決?
    解析:beforeRouteEnter在組件實(shí)例創(chuàng)建前調(diào)用,因此this未定義。可通過回調(diào)函數(shù)訪問實(shí)例:

    beforeRouteEnter(to, from, next) {
      next(vm => { // vm 是組件實(shí)例
        vm.fetchData()
      })
    }
  8. 如何實(shí)現(xiàn)路由懶加載?有什么好處?
    解析:通過動(dòng)態(tài)import實(shí)現(xiàn)組件按需加載,減少初始打包體積,提升首屏加載速度。

    const Home = () => import('@/views/Home.vue')
    const routes = [{ path: '/home', component: Home }]

    進(jìn)階:結(jié)合webpackChunkName分組加載(如import(/* webpackChunkName: "user" */ '@/views/User.vue'))。

  9. Vue Router 如何傳遞查詢參數(shù)(query)和路由參數(shù)(params)?
    解析:

    • 查詢參數(shù)(query):類似 URL 中的?key=value,通過router.push({ path: '/user', query: { id: 1 } })傳遞,獲取用$route.query
    • 路由參數(shù)(params):通過動(dòng)態(tài)路由/user/:id定義,router.push({ name: 'User', params: { id: 1 } })傳遞(需用命名路由),獲取用$route.params。
      區(qū)別:query參數(shù)會(huì)顯示在 URL 中,刷新不丟失;params參數(shù)默認(rèn)不顯示,刷新會(huì)丟失(需配合動(dòng)態(tài)路由)。
  10. 如何實(shí)現(xiàn)路由重定向和別名?
    解析:

    • 重定向(redirect):{ path: '/', redirect: '/home' }(訪問/跳轉(zhuǎn)到/home),支持函數(shù)動(dòng)態(tài)返回目標(biāo)路由。
    • 別名(alias):{ path: '/home', component: Home, alias: '/index' }/index/home訪問同一組件)。
  11. $router$route的區(qū)別?
    解析:

    • $router:路由實(shí)例對象,包含路由跳轉(zhuǎn)方法(push、replace等)和全局配置。
    • $route:當(dāng)前路由信息對象,包含path、params、query、meta等路由相關(guān)數(shù)據(jù)。
  12. 如何在路由配置中添加元信息(meta)?有什么用途?
    解析:meta用于存儲路由的額外信息(如標(biāo)題、權(quán)限要求)。

    const routes = [{
      path: '/admin',
      component: Admin,
      meta: { requiresAuth: true, title: '管理員頁面' }
    }]

    用途:在全局守衛(wèi)中判斷權(quán)限(to.meta.requiresAuth)、動(dòng)態(tài)設(shè)置頁面標(biāo)題(document.title = to.meta.title)。

  13. 如何實(shí)現(xiàn)嵌套路由的默認(rèn)子路由?
    解析:在children中配置path: ''的路由作為默認(rèn)子路由:

    {
      path: '/user',
      component: User,
      children: [
        { path: '', component: UserProfile }, // 默認(rèn)顯示UserProfile
        { path: 'posts', component: UserPosts }
      ]
    }
  14. Vue Router 的scrollBehavior作用是什么?
    解析:控制路由跳轉(zhuǎn)時(shí)頁面的滾動(dòng)位置(如返回頂部、保持滾動(dòng)位置)。

    const router = new VueRouter({
      scrollBehavior(to, from, savedPosition) {
        if (savedPosition) {
          return savedPosition; // 后退時(shí)恢復(fù)滾動(dòng)位置
        } else {
          return { x: 0, y: 0 }; // 默認(rèn)滾動(dòng)到頂部
        }
      }
    })
  15. Vue3 中如何使用 Vue Router?與 Vue2 有何區(qū)別?
    解析:Vue3 中使用createRoutercreateWebHistory(或createWebHashHistory)創(chuàng)建路由實(shí)例,通過useRouteruseRoutesetup中訪問。
    區(qū)別:

    • 實(shí)例創(chuàng)建方式:Vue2 用new VueRouter(),Vue3 用createRouter()。
    • 模式配置:Vue3 通過history選項(xiàng)指定(createWebHistory()),Vue2 通過mode選項(xiàng)。
    • 組合式 API:Vue3 支持在setup中用useRouter/useRoute,無需this。

四、性能優(yōu)化(15 題)

  1. Vue 項(xiàng)目的性能優(yōu)化有哪些方向?
    解析:

    • 代碼層面:合理使用v-if/v-show、避免不必要的響應(yīng)式數(shù)據(jù)、優(yōu)化watchcomputed。
    • 組件層面:拆分大型組件、使用keep-alive緩存組件、異步組件。
    • 渲染層面:列表優(yōu)化(key、虛擬滾動(dòng))、減少 DOM 操作、優(yōu)化重繪 / 重排。
    • 構(gòu)建層面:路由懶加載、代碼分割、Tree-shaking、壓縮資源。
    • 網(wǎng)絡(luò)層面:接口緩存、圖片優(yōu)化(懶加載、壓縮)、CDN 加速。
  2. v-ifv-show如何選擇以優(yōu)化性能?
    解析:

    • v-if:條件不滿足時(shí)組件會(huì)被銷毀(DOM 移除),適合條件不常變化的場景(如權(quán)限控制)。
    • v-show:條件不滿足時(shí)組件僅隱藏(display: none),適合條件頻繁變化的場景(如切換標(biāo)簽)。
      原則:頻繁切換用v-show,一次性判斷用v-if。
  3. 如何優(yōu)化 Vue 的列表渲染性能?
    解析:

    • 用唯一key標(biāo)識節(jié)點(diǎn),避免復(fù)用錯(cuò)誤。
    • 大數(shù)據(jù)列表用虛擬滾動(dòng)(如vue-virtual-scroller),只渲染可視區(qū)域內(nèi)的元素。
    • 避免在v-for中使用v-if,可通過計(jì)算屬性過濾數(shù)據(jù)。
    • 固定高度列表可設(shè)置scrollTop緩存滾動(dòng)位置。
  4. 如何減少 Vue 的響應(yīng)式開銷?
    解析:

    • 非響應(yīng)式數(shù)據(jù):用Object.freeze()凍結(jié)無需響應(yīng)式的對象(如靜態(tài)數(shù)據(jù))。
    • 合理使用refreactive:基本類型用ref,避免將所有數(shù)據(jù)放入reactive。
    • 拆分響應(yīng)式對象:將大對象拆分為多個(gè)小對象,避免不必要的依賴收集。
    • Vue3 的shallowRef/shallowReactive:用于不需要深層響應(yīng)式的場景。
  5. keep-alive的使用場景和注意事項(xiàng)?
    解析:場景:需要緩存狀態(tài)的組件(如表單頁面、詳情頁),避免重復(fù)請求數(shù)據(jù)或重置狀態(tài)。
    注意:

    • 緩存過多會(huì)占用內(nèi)存,需配合include/exclude限制范圍。
    • 被緩存組件的mounted鉤子只會(huì)執(zhí)行一次,需用activated處理每次激活邏輯。
  6. Vue 項(xiàng)目如何實(shí)現(xiàn)圖片懶加載?
    解析:

    • 第三方庫:使用vue-lazyload插件,通過v-lazy指令綁定圖片路徑。
    • 原生實(shí)現(xiàn):監(jiān)聽scroll事件,判斷圖片進(jìn)入視口后設(shè)置src屬性(結(jié)合IntersectionObserver更高效)。
      好處:減少初始加載的圖片請求,提升首屏加載速度。
  7. 如何優(yōu)化 Vue 的打包體積?
    解析:

    • 路由懶加載:按路由拆分代碼,避免一次性加載所有組件。
    • 第三方庫按需引入:如 Element UI 用babel-plugin-component只引入需要的組件。
    • Tree-shaking:通過mode: 'production'啟用,移除未使用的代碼。
    • 壓縮資源:JS/CSS 壓縮(terser-webpack-plugincss-minimizer-webpack-plugin)、圖片壓縮。
    • 分析工具:用webpack-bundle-analyzer查看包體積,針對性優(yōu)化。
  8. Vue 的事件委托如何優(yōu)化性能?
    解析:將子元素的事件監(jiān)聽委托給父元素,減少事件監(jiān)聽器數(shù)量(尤其列表場景)。
    示例:

    <ul @click="handleClick">
      <li v-for="item in list" :key="item.id" :data-id="item.id">{{ item.name }}</li>
    </ul>
    handleClick(e) {
      const id = e.target.dataset.id;
      if (id) { /* 處理邏輯 */ }
    }
  9. 如何避免 Vue 中的內(nèi)存泄漏?
    解析:

    • 清除定時(shí)器:在beforeUnmount中用clearTimeout/clearInterval銷毀。
    • 移除事件監(jiān)聽:用removeEventListener解綁手動(dòng)添加的事件。
    • 解除 DOM 引用:組件銷毀前,將指向 DOM 元素的變量設(shè)為null
    • 清理第三方庫實(shí)例:如地圖、圖表庫,需調(diào)用destroy方法。
  10. Vue3 的setup函數(shù)中如何優(yōu)化性能?
    解析:

    • 避免在setup中創(chuàng)建不必要的函數(shù)(可提取到外部或用useMemo緩存)。
    • shallowRef/shallowReactive處理不需要深層響應(yīng)式的數(shù)據(jù)。
    • watchEffectonCleanup清理副作用(如定時(shí)器、事件監(jiān)聽)。
    • 組件通信優(yōu)先用propsemit,減少provide/inject的過度使用。
  11. 如何優(yōu)化 Vue 的首屏加載速度?
    解析:

    • 減小入口文件體積:路由懶加載、按需引入庫。
    • 靜態(tài)資源優(yōu)化:圖片壓縮、使用 CDN、啟用 Gzip/Brotli 壓縮。
    • 預(yù)加載關(guān)鍵資源:<link rel="preload">提前加載核心 CSS/JS。
    • 服務(wù)端優(yōu)化:SSR(服務(wù)端渲染)或 SSG(靜態(tài)站點(diǎn)生成),如 Nuxt.js。
    • 合理利用緩存:HTTP 緩存(Cache-Control)、Service Worker 緩存。
  12. Vue 中的transitiontransition-group如何優(yōu)化動(dòng)畫性能?
    解析:

    • transformopacity實(shí)現(xiàn)動(dòng)畫(觸發(fā)合成層,避免重排)。
    • 避免在動(dòng)畫中修改widthheight等會(huì)引發(fā)重排的屬性。
    • 對大量元素動(dòng)畫用transition-group,并設(shè)置tag屬性指定容器標(biāo)簽。
    • 復(fù)雜動(dòng)畫可使用requestAnimationFrame或 Web Animations API。
  13. Vue 項(xiàng)目中如何使用 Web Worker?
    解析:Web Worker 用于在后臺線程處理耗時(shí)任務(wù)(如大數(shù)據(jù)計(jì)算),避免阻塞主線程。
    步驟:

    1. 創(chuàng)建 worker 文件(worker.js),編寫計(jì)算邏輯。
    2. 在 Vue 組件中實(shí)例化new Worker('worker.js')
    3. 通過postMessageonmessage通信。
      注意:Worker 中不能訪問 DOM 和 Vue 實(shí)例,需通過消息傳遞結(jié)果。
  14. 如何優(yōu)化 Vue 的計(jì)算屬性(computed)和監(jiān)聽器(watch)?
    解析:

    • computed:依賴盡量精簡,避免復(fù)雜計(jì)算(可拆分為多個(gè)computed)。
    • watch:使用immediate: true代替初始化時(shí)手動(dòng)調(diào)用,用deep: true時(shí)注意性能(可監(jiān)聽具體屬性)。
    • Vue3 中用watchEffect自動(dòng)追蹤依賴,比watch更簡潔。
  15. Vue 項(xiàng)目的 SEO 優(yōu)化有哪些方案?
    解析:

    • SSR(服務(wù)端渲染):如 Nuxt.js,讓搜索引擎抓取完整 HTML。
    • SSG(靜態(tài)站點(diǎn)生成):預(yù)渲染頁面為 HTML,適合內(nèi)容固定的場景。
    • 合理使用meta標(biāo)簽:title、description、keywords。
    • 語義化 HTML:使用<h1>-<h6><article>等標(biāo)簽。
    • 動(dòng)態(tài)渲染:通過服務(wù)端將 JS 渲染的內(nèi)容轉(zhuǎn)換為 HTML 返回給搜索引擎。

五、工程化與生態(tài)(15 題)

  1. Vue CLI 的核心功能是什么?如何自定義 Vue CLI 配置?
    解析:Vue CLI 是官方腳手架工具,核心功能:項(xiàng)目初始化、開發(fā)服務(wù)器、代碼編譯、打包構(gòu)建。
    自定義配置:

    • 通過vue.config.js修改 Webpack 配置(如configureWebpack、chainWebpack)。
    • 配置環(huán)境變量(.env.development、.env.production)。
    • 自定義入口文件、輸出路徑等。
  2. Vite 和 Vue CLI 的區(qū)別是什么?為什么 Vite 更快?
    解析:

    • 原理不同:Vue CLI 基于 Webpack(打包后開發(fā)),Vite 基于 ES Modules(按需編譯,無需打包)。
    • 速度差異:Vite 開發(fā)環(huán)境啟動(dòng)快(無需打包)、熱更新快(只更新修改的模塊),生產(chǎn)環(huán)境仍用 Rollup 打包。
    • 適用場景:Vite 適合現(xiàn)代瀏覽器項(xiàng)目,Vue CLI 兼容性更好(支持舊瀏覽器)。
  3. Vue 項(xiàng)目中如何使用 TypeScript?
    解析:

    • 初始化:vue create時(shí)選擇 TypeScript,或用 Vite 創(chuàng)建vue-ts模板。
    • 組件寫法:用defineComponent定義組件,指定propsemits的類型。
    • 類型聲明:為全局變量、模塊擴(kuò)展編寫.d.ts聲明文件。
    • 優(yōu)勢:類型檢查、IDE 智能提示、減少運(yùn)行時(shí)錯(cuò)誤。
  4. Vue 項(xiàng)目的目錄結(jié)構(gòu)如何設(shè)計(jì)更合理?
    解析:

    src/
    ├── assets/         # 靜態(tài)資源(圖片、樣式)
    ├── components/     # 通用組件
    │   ├── common/     # 基礎(chǔ)組件(按鈕、輸入框)
    │   ├── business/   # 業(yè)務(wù)組件
    ├── views/          # 頁面組件(路由對應(yīng)的組件)
    ├── router/         # 路由配置
    ├── store/          # 狀態(tài)管理(Vuex/Pinia)
    ├── utils/          # 工具函數(shù)
    ├── api/            # 接口請求
    ├── hooks/          # 自定義鉤子(Vue3)
    ├── App.vue         # 根組件
    └── main.js         # 入口文件

    Vue 項(xiàng)目中如何統(tǒng)一管理 API 請求?
    解析:

    • 封裝axios:設(shè)置基礎(chǔ) URL、請求攔截器(加 token)、響應(yīng)攔截器(處理錯(cuò)誤)。
    • 按模塊組織 API:api/user.js、api/goods.js,每個(gè)模塊導(dǎo)出相關(guān)接口函數(shù)。
    • 使用環(huán)境變量:不同環(huán)境(開發(fā) / 生產(chǎn))的 API 地址通過.env文件配置。
      示例:
    // api/user.js
    import request from '@/utils/request'
    export const getUserInfo = (id) => request.get(`/user/${id}`)
  5. Vue 組件的樣式隔離方案有哪些?
    解析:

    • Scoped CSS:<style scoped>,通過添加屬性選擇器實(shí)現(xiàn)樣式隔離(子組件根元素會(huì)繼承父組件樣式)。
    • CSS Modules:<style module>,類名自動(dòng)哈?;?,通過$style.class引用,完全隔離。
    • CSS-in-JS:如styled-components,用 JS 編寫樣式,組件級隔離。
    • BEM 命名規(guī)范:通過命名約定(block__element--modifier)避免沖突。
  6. Vue 項(xiàng)目如何實(shí)現(xiàn)多環(huán)境配置?
    解析:

    • 環(huán)境文件:.env.development(開發(fā))、.env.production(生產(chǎn))、.env.test(測試),定義變量(如VUE_APP_API_URL)。
    • 啟動(dòng)命令:在package.json中配置"serve": "vue-cli-service serve --mode development"
    • 代碼中使用:process.env.VUE_APP_API_URL(Vue3/Vite 中用import.meta.env)。
  7. Vue 項(xiàng)目中如何進(jìn)行單元測試?
    解析:

    • 工具:Jest(測試框架)+ Vue Test Utils(Vue 測試工具庫)。
    • 測試內(nèi)容:組件渲染、事件觸發(fā)、計(jì)算屬性、Vuex/actions 等。
    • 示例:測試按鈕點(diǎn)擊事件
    import { mount } from '@vue/test-utils'
    import Button from '@/components/Button.vue'
    test('click event', async () => {
      const wrapper = mount(Button)
      await wrapper.trigger('click')
      expect(wrapper.emitted('click')).toBeTruthy()
    })
  8. Vue3 的SFC(單文件組件)與 Vue2 相比有哪些改進(jìn)?
    解析:

    • <script setup>:簡化組合式 API 寫法,無需export defaultsetup函數(shù)。
    • 更好的 TypeScript 支持:defineProps、defineEmits原生支持類型推斷。
    • 樣式特性::deep()穿透scoped樣式、::v-slotted作用于插槽內(nèi)容。
    • 性能優(yōu)化:模板編譯更高效,生成的代碼體積更小。
  9. Vue 項(xiàng)目中如何集成 ESLint 和 Prettier?
    解析:

    • 安裝依賴:eslint、eslint-plugin-vue、prettier、eslint-config-prettier(解決沖突)。
    • 配置文件:.eslintrc.js(ESLint 規(guī)則)、.prettierrc(Prettier 格式規(guī)則)。
    • 自動(dòng)修復(fù):VS Code 配置保存時(shí)自動(dòng)修復(fù)(editor.codeActionsOnSave: { "source.fixAll.eslint": true })。
  10. Nuxt.js 的核心功能是什么?與 Vue 有何關(guān)系?
    解析:Nuxt.js 是基于 Vue 的服務(wù)端渲染(SSR)框架,核心功能:

    • SSR/SSG:服務(wù)端渲染提升首屏速度和 SEO。
    • 路由自動(dòng)生成:基于pages目錄結(jié)構(gòu)自動(dòng)配置路由。
    • 內(nèi)置組件:nuxt-link、nuxt-head等簡化開發(fā)。
    • 中間件:處理全局權(quán)限、重定向等邏輯。
      關(guān)系:Nuxt.js 是 Vue 的上層框架,擴(kuò)展了 Vue 的功能,適合構(gòu)建 SEO 友好的應(yīng)用。
  11. Vue 項(xiàng)目中如何實(shí)現(xiàn)主題切換功能?
    解析:

    • CSS 變量:定義--primary-color等變量,通過 JS 修改document.documentElement.style切換。
    • 類名切換:為htmlbody添加主題類(如theme-dark),在 CSS 中定義不同主題樣式。
    • 動(dòng)態(tài)引入樣式:通過import()動(dòng)態(tài)加載不同主題的 CSS 文件。
    • 配合localStorage保存用戶主題偏好。
  12. Vue 組件庫(如 Element UI、Ant Design Vue)的按需引入原理是什么?
    解析:通過babel-plugin-component等插件,在編譯時(shí)只引入組件的核心代碼和樣式,而非整個(gè)庫。
    原理:解析import語句,將import { Button } from 'element-ui'轉(zhuǎn)換為只引入Button組件的代碼和對應(yīng)的 CSS,減少打包體積。

  13. Vue 項(xiàng)目中如何處理跨域問題?
    解析:

    • 開發(fā)環(huán)境:通過 Vue CLI/Vite 的代理配置(devServer.proxy)轉(zhuǎn)發(fā)請求,避免跨域。
      // vue.config.js
      module.exports = {
        devServer: {
          proxy: {
            '/api': { target: 'http://backend.com', changeOrigin: true }
          }
        }
      }
    • 生產(chǎn)環(huán)境:后端配置 CORS(Access-Control-Allow-Origin)或通過 Nginx 反向代理。
  14. Vue3 的definePropsdefineEmits與 Vue2 的props$emit有何區(qū)別?
    解析:

    • Vue2:props在選項(xiàng)中聲明,$emit通過this.$emit調(diào)用,類型檢查需手動(dòng)實(shí)現(xiàn)。
    • Vue3:definePropsdefineEmits是編譯時(shí)宏,無需導(dǎo)入,支持 TypeScript 類型聲明,更簡潔且類型安全:
      const props = defineProps<{ name: string; age?: number }>()
      const emit = defineEmits<{ (e: 'change', value: string): void }>()

六、綜合與拓展(20 題)

  1. Vue 和 React 的區(qū)別是什么?
    解析:

    • 核心思想:Vue 強(qiáng)調(diào)漸進(jìn)式框架(靈活選擇功能),React 強(qiáng)調(diào)組件化和 JSX(一切皆組件)。
    • 模板 vs JSX:Vue 用 HTML 模板(可選 JSX),React 用 JSX(HTML 在 JS 中)。
    • 響應(yīng)式:Vue 自動(dòng)響應(yīng)式(Vue2Object.defineProperty,Vue3Proxy),React 需手動(dòng)調(diào)用setState或用useState
    • 狀態(tài)管理:Vue 有 Vuex/Pinia,React 有 Redux/MobX/Context API。
    • 生態(tài):Vue 生態(tài)更集成(官方路由、狀態(tài)管理),React 更靈活(社區(qū)方案多)。
  2. Vue2 升級到 Vue3 需要注意哪些問題?
    解析:

    • 響應(yīng)式系統(tǒng)變化:Object.definePropertyProxy,需注意this.$set替換為直接賦值。
    • 生命周期調(diào)整:beforeDestroybeforeUnmount,destroyedunmounted
    • 移除 API:$on、$off$once(事件總線需用第三方庫)、filter(建議用computed替代)。
    • 組件寫法:推薦composition API<script setup>,options API仍支持但不推薦。
    • 第三方庫兼容性:需升級支持 Vue3 的 UI 庫(如 Element Plus 替代 Element UI)。
  3. Vue 中如何實(shí)現(xiàn)權(quán)限控制?
    解析:

    • 路由權(quán)限:在路由守衛(wèi)(beforeEach)中判斷用戶權(quán)限,無權(quán)限則重定向到登錄頁或 403 頁。
    • 按鈕權(quán)限:通過自定義指令(如v-permission)或組件封裝,根據(jù)權(quán)限顯示 / 隱藏按鈕。
    • 數(shù)據(jù)權(quán)限:請求接口時(shí)攜帶用戶權(quán)限信息,后端返回對應(yīng)權(quán)限的數(shù)據(jù)。
      示例:路由守衛(wèi)控制
    router.beforeEach((to, from, next) => {
      if (to.meta.requiresAuth && !store.state.isLogin) {
        next('/login');
      } else {
        next();
      }
    });
  4. Vue 中如何處理表單驗(yàn)證?
    解析:

    • 原生驗(yàn)證:利用 HTML5 表單屬性(required、pattern)配合v-model
    • 第三方庫:使用VeeValidateVuelidate,支持復(fù)雜驗(yàn)證規(guī)則和錯(cuò)誤提示。
    • 自定義驗(yàn)證:在watch@input事件中編寫驗(yàn)證邏輯,存儲錯(cuò)誤信息并展示。
    • Element UI/Plus:內(nèi)置el-formel-form-item組件,通過rules屬性配置驗(yàn)證規(guī)則。
  5. Vue 中如何實(shí)現(xiàn)國際化(i18n)?
    解析:使用vue-i18n庫:

    1. 定義語言包(en.js、zh.js)。
    2. 初始化i18n實(shí)例并注入 Vue。
    3. 在模板中用{{ $t('message.hello') }},在 JS 中用this.$t('message.hello')
    4. 通過this.$i18n.locale = 'en'切換語言。
  6. Vue 項(xiàng)目中如何實(shí)現(xiàn) WebSocket 實(shí)時(shí)通信?
    解析:

    • 原生 WebSocket:在組件mounted中創(chuàng)建連接,onmessage處理消息,beforeUnmount關(guān)閉連接。
    • 第三方庫:使用socket.io-client簡化操作,支持重連、事件監(jiān)聽等。
      示例:
    mounted() {
      this.socket = new WebSocket('ws://localhost:8080');
      this.socket.onmessage = (e) => {
        this.handleMessage(JSON.parse(e.data));
      };
    },
    beforeUnmount() {
      this.socket.close();
    }
  7. Vue 中如何實(shí)現(xiàn)打印功能?
    解析:

    • 原生window.print():配合@media print樣式控制打印內(nèi)容。
    • 第三方庫:vue-print-nb插件,通過v-print指令指定打印區(qū)域。
    • 實(shí)現(xiàn)思路:隱藏不需要打印的元素,調(diào)用print(),打印后恢復(fù)樣式。
  8. Vue3 的provideinject與 Vuex 有何區(qū)別?
    解析:

    • provide/inject:用于跨級組件通信,非響應(yīng)式(Vue3 中需配合ref/reactive實(shí)現(xiàn)響應(yīng)式),適合簡單場景。
    • Vuex:全局狀態(tài)管理,支持響應(yīng)式、狀態(tài)追蹤、模塊化,適合復(fù)雜應(yīng)用的全局狀態(tài)共享。
      選擇:局部跨級通信用provide/inject,全局狀態(tài)用 Vuex/Pinia。
  9. Vue 中的 “單向數(shù)據(jù)流” 原則是什么?如何理解?
    解析:數(shù)據(jù)從父組件通過props流向子組件,子組件不能直接修改props(需通過$emit通知父組件修改)。
    目的:避免數(shù)據(jù)流向混亂,便于調(diào)試和維護(hù)。若子組件需修改props,可在data中定義本地變量接收props,或用computed處理。

  10. Vue 中如何實(shí)現(xiàn)拖拽功能?
    解析:

    • 原生實(shí)現(xiàn):監(jiān)聽mousedownmousemove、mouseup事件,計(jì)算位移并修改元素style.left/top。
    • 第三方庫:vuedraggable(基于Sortable.js),支持列表拖拽排序。
      示例:簡單拖拽
    const handleMousedown = (e) => {
      const startX = e.clientX;
      const startY = e.clientY;
      const startLeft = parseInt(el.style.left) || 0;
      const startTop = parseInt(el.style.top) || 0;
      const handleMousemove = (e) => {
        el.style.left = startLeft + (e.clientX - startX) + 'px';
        el.style.top = startTop + (e.clientY - startY) + 'px';
      };
      document.addEventListener('mousemove', handleMousemove);
      document.addEventListener('mouseup', () => {
        document.removeEventListener('mousemove', handleMousemove);
      });
    };
  11. Vue 項(xiàng)目中如何處理大數(shù)據(jù)可視化?
    解析:

    • 選擇輕量庫:中小型圖表用echartschart.js,大型復(fù)雜圖表用G2D3.js。
    • 性能優(yōu)化:數(shù)據(jù)分片加載、圖表懶渲染、避免頻繁重繪(使用requestAnimationFrame)。
    • Web Worker:將數(shù)據(jù)處理邏輯放入 Worker,避免阻塞主線程。
    • 組件封裝:將圖表封裝為組件,通過props傳遞數(shù)據(jù),支持動(dòng)態(tài)更新。
  12. Vue 中的 “混入”(mixins)和 “組合式 API”(composition API)哪個(gè)更適合邏輯復(fù)用?為什么?
    解析:組合式 API 更適合,原因:

    • 避免命名沖突:mixins的屬性和方法可能沖突,組合式 API 通過函數(shù)封裝,變量作用域隔離。
    • 邏輯清晰:組合式 API 按功能組織代碼,可清晰看到邏輯來源,mixins邏輯分散。
    • 類型友好:組合式 API 更好地支持 TypeScript 類型推斷,mixins類型難以維護(hù)。
  13. Vue3 的ref為什么需要.value訪問?
    解析:ref用于包裝基本類型(如number、string),使其具有響應(yīng)性。ref返回的是一個(gè)對象({ value: ... }),因?yàn)?JavaScript 中基本類型按值傳遞,對象按引用傳遞,通過.value才能觸發(fā)Proxy的攔截,實(shí)現(xiàn)響應(yīng)式更新。
    注意:在<script setup>的模板中使用ref變量時(shí),Vue 會(huì)自動(dòng)解包,無需.value

  14. Vue 中如何實(shí)現(xiàn)虛擬滾動(dòng)列表?
    解析:虛擬滾動(dòng)只渲染可視區(qū)域內(nèi)的列表項(xiàng),適合大數(shù)據(jù)列表(如 10 萬 + 條數(shù)據(jù))。

    • 原理:計(jì)算可視區(qū)域高度、每項(xiàng)高度,確定需要渲染的起始和結(jié)束索引,通過transform偏移列表容器,模擬滾動(dòng)效果。
    • 庫推薦:vue-virtual-scroller、vue3-virtual-scroller
  15. Vue 項(xiàng)目中如何集成 PWA(漸進(jìn)式 Web 應(yīng)用)?
    解析:

    • 使用 Vue CLI 的 PWA 插件:@vue/cli-plugin-pwa,自動(dòng)生成service-worker.js。
    • 配置manifest.json:定義應(yīng)用名稱、圖標(biāo)、啟動(dòng)頁等。
    • 實(shí)現(xiàn)功能:離線訪問、添加到桌面、推送通知(需后端支持)。
      優(yōu)勢:提升用戶體驗(yàn),類似原生應(yīng)用,支持離線使用。
  16. Vue 中的 “依賴注入”(provide/inject)適用于哪些場景?
    解析:適用于跨多級組件通信(如祖父→孫子),避免 “props drilling”(層層傳遞 props)。
    典型場景:

    • 主題配置(全局主題傳遞給深層組件)。
    • 權(quán)限信息(用戶權(quán)限傳遞給各功能組件)。
    • 插件配置(如 UI 庫的全局配置傳遞給內(nèi)部組件)。
      注意:不適合頻繁變化的數(shù)據(jù)(需手動(dòng)處理響應(yīng)式),復(fù)雜場景建議用 Vuex。
  17. Vue3 的 reactivity模塊如何單獨(dú)使用?
    解析:Vue3 的響應(yīng)式系統(tǒng)可獨(dú)立于 Vue 實(shí)例使用,適合非 Vue 項(xiàng)目或庫開發(fā)。

    import { reactive, effect } from 'vue'
    const state = reactive({ count: 0 })
    effect(() => { // 副作用函數(shù),狀態(tài)變化時(shí)自動(dòng)執(zhí)行
      console.log(`count: ${state.count}`)
    })
    state.count++ // 輸出 "count: 1"
  18. Vue 中如何實(shí)現(xiàn)圖片預(yù)覽功能?
    解析:

    • 點(diǎn)擊圖片時(shí),用el-dialog(Element UI)或自定義彈窗展示大圖。
    • 利用FileReader預(yù)覽本地選擇的圖片(input type="file")。
    • 插件:vue-previewviewer.js,支持縮放、旋轉(zhuǎn)、切換等功能。
  19. Vue 項(xiàng)目中如何處理錯(cuò)誤邊界(Error Boundary)?
    解析:Vue2 中無官方錯(cuò)誤邊界,但可通過errorCaptured鉤子捕獲子組件錯(cuò)誤:

    export default {
      errorCaptured(err, vm, info) {
        console.error('捕獲錯(cuò)誤:', err, info);
        return false; // 阻止錯(cuò)誤向上傳播
      }
    }

    Vue3 中可通過onErrorCaptured鉤子實(shí)現(xiàn)類似功能,或使用第三方庫(如vue-error-boundary)。

  20. 未來 Vue 的發(fā)展趨勢是什么?
    解析:

  • 更好的 TypeScript 集成:Vue3 已大幅提升類型支持,未來會(huì)進(jìn)一步優(yōu)化。
  • 編譯時(shí)優(yōu)化:通過靜態(tài)分析提升性能(如 Vue3 的compile-time特性)。
  • 服務(wù)器組件:借鑒 React Server Components,提升首屏性能和 SEO。
  • 生態(tài)完善:Vite、Pinia、Vue Router 等工具鏈持續(xù)優(yōu)化,降低開發(fā)成本。
  • 跨平臺能力:加強(qiáng)與移動(dòng)端(如 Ionic、NativeScript)和桌面端(如 Electron)的集成。

以上題目覆蓋了 Vue 的核心原理、生態(tài)工具、性能優(yōu)化等高級知識點(diǎn),建議結(jié)合實(shí)際項(xiàng)目理解和實(shí)踐,不僅要知其然,更要知其所以然。

總結(jié)

到此這篇關(guān)于適合中高級前端vue面試的100道題目及解析的文章就介紹到這了,更多相關(guān)前端vue面試題目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決vue打包后刷新頁面報(bào)錯(cuò):Unexpected token <

    解決vue打包后刷新頁面報(bào)錯(cuò):Unexpected token <

    這篇文章主要介紹了解決vue打包后刷新頁面報(bào)錯(cuò):Unexpected token <相關(guān)知識點(diǎn),需要的朋友們參考下。
    2019-08-08
  • Vue實(shí)現(xiàn)時(shí)間軸功能

    Vue實(shí)現(xiàn)時(shí)間軸功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)時(shí)間軸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Vue3中reactive丟失響應(yīng)式問題詳解

    Vue3中reactive丟失響應(yīng)式問題詳解

    在vue3中,如果你用reactive聲明了一個(gè)對象,用另一個(gè)對象直接給它賦值,那么它就會(huì)失去響應(yīng)式,下面這篇文章主要給大家介紹了關(guān)于Vue3中reactive丟失響應(yīng)式問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vue3基礎(chǔ)知識剖析

    vue3基礎(chǔ)知識剖析

    筆者這篇文章會(huì)從vue3基礎(chǔ)的知識點(diǎn)開始剖析,特別是在將composition?API的時(shí)候,在代碼示例中不會(huì)一上來就使用setup語法糖,而是用早期的setup函數(shù),這樣方便于初學(xué)的小伙伴們理解跟學(xué)習(xí)
    2022-08-08
  • vue+el-table實(shí)現(xiàn)合并單元格

    vue+el-table實(shí)現(xiàn)合并單元格

    這篇文章主要為大家詳細(xì)介紹了vue+el-table實(shí)現(xiàn)合并單元格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • uniapp Vue3中如何解決web/H5網(wǎng)頁瀏覽器跨域的問題

    uniapp Vue3中如何解決web/H5網(wǎng)頁瀏覽器跨域的問題

    存在跨域問題的原因是因?yàn)闉g覽器的同源策略,也就是說前端無法直接發(fā)起跨域請求,同源策略是一個(gè)基礎(chǔ)的安全策略,但是這也會(huì)給uniapp/Vue開發(fā)者在部署時(shí)帶來一定的麻煩,這篇文章主要介紹了在uniapp Vue3版本中如何解決web/H5網(wǎng)頁瀏覽器跨域的問題,需要的朋友可以參考下
    2024-06-06
  • vue2和vue3子組件父組件之間的傳值方法

    vue2和vue3子組件父組件之間的傳值方法

    在組件化開發(fā)的過程中難免會(huì)遇見子組件和父組件之間的通訊那么這里講關(guān)于vue2和vue3不同的通訊方式,文中有詳細(xì)的代碼示例供大家參考,感興趣的同學(xué)可以閱讀下
    2023-05-05
  • Vue監(jiān)聽iframe加載失敗事件的三種實(shí)現(xiàn)方法

    Vue監(jiān)聽iframe加載失敗事件的三種實(shí)現(xiàn)方法

    iframe 是一個(gè) HTML 標(biāo)簽,作用是文檔中的文檔,或者浮動(dòng)的框架(frame),iframe 元素會(huì)創(chuàng)建包含另外一個(gè)文檔的內(nèi)聯(lián)框架(即行內(nèi)框架),本文給大家介紹了Vue監(jiān)聽iframe加載失敗事件的幾種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2025-06-06
  • vue.js項(xiàng)目使用原生js實(shí)現(xiàn)移動(dòng)端的輪播圖

    vue.js項(xiàng)目使用原生js實(shí)現(xiàn)移動(dòng)端的輪播圖

    這篇文章主要為大家介紹了vue.js項(xiàng)目中使用原生js實(shí)現(xiàn)移動(dòng)端的輪播圖,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • vue項(xiàng)目中引入js-base64方式

    vue項(xiàng)目中引入js-base64方式

    這篇文章主要介紹了vue項(xiàng)目中引入js-base64方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評論

荆州市| 江北区| 新蔡县| 伊吾县| 南宁市| 彭阳县| 恩施市| 兴化市| 河间市| 金塔县| 南阳市| 沂水县| 伊通| 托克逊县| 原平市| 高台县| 吉林省| 千阳县| 枝江市| 福州市| 出国| 桃源县| 台北市| 泗洪县| 阜阳市| 天柱县| 曲松县| 神木县| 阿勒泰市| 长汀县| 姚安县| 靖州| 台安县| 朝阳县| 德化县| 调兵山市| 凤城市| 隆化县| 巫山县| 深泽县| 锦屏县|