身為程式設計師如果你想要找到你心儀的工作,不可避免的就會問到很多八股文,雖然有的和工作沒有半毛錢關係,但是你如果想要通過面試還必須得會。所以我最近開始總結一些面試題,一是為了加強自己的理解能夠找到一份好的工作,二是為了盡可能的幫助更多的小伙伴能夠快速掌握相關知識或者順利通過面試?。
本篇文章介紹了一些vue的常見問題。我盡量將這些問題依難易度,相關聯度排列使其更好的過度與理解。當然這篇文章不只是八股文那麼簡單,工作上也常經常用到這些知識點。 【相關推薦:vuejs影片教學】
vue生命週期
這個問題一般問的不多,但是如果問到了你就必須得答出來
回答
#Vue2(選項式API) | Vue3(setup) | 描述 |
---|---|---|
beforeCreate | - | #實例建立前 |
- | 實例建立後 | |
onBeforeMount | DOM掛載前呼叫 | |
onMounted | DOM掛載完成呼叫 | |
#onBeforeUpdate | 資料更新之前被呼叫 | |
#onUpdated | 資料更新之後被呼叫 | |
vue父子元件生命週期
這個相對於上一個問題稍微複雜一點,可以試著理解記憶或直接記住吧
渲染過程
更新流程
#更新前的子########################## ######## ##孩子更新####################################父親更新### ###### ####################銷毀過程
####################################### #父親被毀### ##### #####################注意如果子元件是非同步元件的話它們的執行順序會改變,會先執行完父元件的生命週期然後再執行子元件的生命週期
v-if和v-show
這個問題算是非常基本的題了,它也很好理解,面試一般會問這兩個指令的區別是什麼,以及在什麼場景下分別用哪個指令適當回答
v-if
表示一個dom元素是否被創建,而v-show
則是控制這個dom元素的display
屬性是否為none
一般在頻繁切換狀態的地方使用
v- show
,v-if
則更適合條件不常改變的場景,因為它切換開銷相對較大
v-for和v-if優先權
這個問題被問到的頻率還是比較高的,雖然它在實際開發上並不會這麼用。
回答
開發過程中一般不建議同時將v-for和v-if放在一個標籤中使用
Vue2中v-for的優先權會更高,所以會先執行循環,再進行v-if判斷,所以這樣就會導致無論需不展示這個元素,都會先遍歷整個列表
在Vue3中v-if的優先權會更高,但是當我們遍歷一個數組的時候,根據數組中的某個元素進行v-if判斷的時候就會報錯,因為v-if會先執行此時還沒有拿到這個陣列。所以Vue3中依然不建議這樣使用
說一下computed和watch
computed和watch實際工作中用的比較多,所以問的也比較多,一般理解了基本都能回答上來
computed是計算屬性,當一個屬性受一個或多個屬性影響的時候可以使用.watch是偵聽器,當我們需要根據一個屬性的變化而做出一些處理的時候,可以使用watch來對這個屬性進行監聽
computed具有快取的特點,即當它所依賴的屬性發生改變的時候它才會重新執行內部邏輯.如下程式碼
##
<template> <div>{{ addSum }}</div> <div>{{ addSum }}</div> <div>{{ addSum }}</div> </template> <script> import { computed, ref, watch } from "vue"; const a = ref(1) const b = ref(2) let addSum = computed(() => { console.log('内部逻辑执行') return a.value + b.value }) </script>頁面多次使用
addSum,但是只會列印一次"內部邏輯執行"
watch在頁面首次載入的時候默認不會執行,需要設定immediate:true
首次才會執行監聽
#watch預設只監聽一層資料,不監聽多層資料裡屬性的變化,需要設定deep:true
才會進行深度監聽
#vue-router
關於vue-router能問的問題非常多,例如它的實作原理,路由跳轉,路由守衛等等,所以建議去系統的檢視
vue-router文件
問題1:vue-router是什麼,描述一下它的原理?
Vue Router是Vue官方的路由管理器,有hash和history兩種模式hash模式是透過監聽
hashchange#事件來實現更新頁面部分內容的操作,url後面會帶有
#號
#history模式則是透過監聽
popstate事件來實現更新頁面部分內容的操作原理和
hash模式差不多,只不過url後面不會出現
#會顯得更美觀。同時會帶來一個問題,因為沒有
#號,所以當使用者刷新頁面時會向伺服器發送請求導致請求資源為404,因此需要對
nginx進行一個配置,需要把所有路由都重定向到根頁面
問題2:路由跳轉方式有哪些?
- 內建元件跳轉
#router.push({ path: '/home' })
,
router.replace({ path: '/home' })
問題3:說一下路由守衛?
路由守衛分為全域路由守衛,路由獨享守衛,元件路由守衛
- 全域路由守衛
beforeEach
,接收
to、from、next三個參數,每個路由跳轉前都會觸發,登入驗證時用的比較多
beforeResolve
,和
beforeEach類似,差異是在導航被確認之前,同時在所有元件內守衛和非同步路由元件被解析之後調用
- afterEach,在路由跳轉完成後調用,接收to、from兩個參數
,一般設定在路由設定檔中(router/index.js),對進入某個路由前進行相關操作<ul><li>组件路由守卫</li></ul>
<blockquote><p>接收<code>to、from、next
三个参数
beforeRouteEnter
,进入该组件之前调用,无法获取到vue实例beforeRouteUpdate
,在当前路由改变,但是该组件被复用时调用beforeRouteLeave
, 在离开当前组件时调用
vue2和vue3区别
当面试问你会用vue3吗,如果你回答会用的话,那么大概率会问vue2和vue3有哪些区别,最近我去面试的时候百分之90都问了这个问题。
回答
写法上的区别:vue2使用的是
options(选项)Api
,vue3的是composition Api
(当然vue3也兼容composition api
)。options Api
中methods,compute,data
等api都是分散的。而composition api
中的代码是根据逻辑功能来组织的,我们可以将一个功能所定义的methods,compute,data
等api会放在一起,让我们可以更灵活地组合组件逻辑。vue2将响应式数据放到data函数中,而vue3则是使用
ref
和reactive
将数据声明为响应式响应式实现方式:vue2中是通过
Object.defineProperty
对数据劫持实现的,vue3中则是使用Proxy
对数据代理实现的。生命周期区别:vue3中将
beforeCreate
和created
合并到了setup
函数中根节点: vue3组件允许多个根节点,而vue2只允许一个
内置组件: vue3新增了传送组件
Teleport
和异步依赖处理组件Suspense
vue插件使用
面试一般会问你如何写一个vue插件,所以没写过vue插件的最好去亲自体验一下
回答:
vue
实例会有一个use
函数,它接受的是一个带有install
函数的对象和一个可选的选项对象,当我们使用 vue.use(plugin)
或者app.use(plugin)
会调用我们插件的install
属性的函数,并且将当前组件的实例传进来.所以在插件中就可以对这个实例进行一些操作来实现我们插件的功能
vue插槽
插槽slot
可以理解为占坑,当使用一个组件的时候,在组件标签里的对应的内容就会替换掉这个组件中的slot
标签。
插槽分为默认插槽
,具名插槽
,作用域插槽
。
默认插槽子组件中用slot
标签来确定渲染位置,父组件使用它时直接在子组件的标签内写入内容即可
//子组件 <template> <slot></slot> </template> //父组件 <child> <div>默认插槽</div> </child>
具名插槽
顾名思义就是具有名字的插槽,子组件中可以用name
熟悉对slot
命名,父组件在使用的时候通过template
中的v-slot:name
或者#name
来定义这个插槽中的内容
//子组件 <template> <slot></slot> </template> //父组件 <child> <template>具名插槽内容</template> </child>
作用域插槽
子组件中的slot
可以通过类似组件属性传递的方式将子组件的值传递给父组件中这个子组件的插槽内容中
(子组件标签内),在父组件使用子组件的时候要用v-slot
的值进行接收这些参数,默认插槽可以将其直接写在子组件标签上,具名插槽则写在template
上。而传过来的值只能在子组件标签中或者template
标签中使用。所以在父组件作用域中获取到了子组件作用域中的变量,可以认为作用域插槽延伸了子组件数据的作用范围,因此叫做作用域插槽
如果你想详细理解插槽的作用可以阅读这篇文章Vue3中插槽(slot)用法汇总 - 掘金 (juejin.cn)
组件通信
这里我大概归纳了一下vue2和vue3的传参方式
方式 | Vue2 | Vue3 |
---|---|---|
父傳子 | props | props |
子傳父 | $emit | emits |
父傳子 | $attrs | attrs |
#子傳父 | ##$listeners無(合併到attrs方式) | |
provide/inject | provide/inject | |
$parent | 無 | |
##$children | 無 | |
$ref | expose&ref | ##兄弟元件傳值 |
mitt | # |
以上是【整理總結】20道高頻Vue面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Vue.js通過多種功能提升用戶體驗:1.響應式系統實現數據即時反饋;2.組件化開發提高代碼復用性;3.VueRouter提供平滑導航;4.動態數據綁定和過渡動畫增強交互效果;5.錯誤處理機制確保用戶反饋;6.性能優化和最佳實踐提升應用性能。

Vue.js在Web開發中的角色是作為一個漸進式JavaScript框架,簡化開發過程並提高效率。 1)它通過響應式數據綁定和組件化開發,使開發者能專注於業務邏輯。 2)Vue.js的工作原理依賴於響應式系統和虛擬DOM,優化性能。 3)實際項目中,使用Vuex管理全局狀態和優化數據響應性是常見實踐。

Vue.js是由尤雨溪在2014年發布的漸進式JavaScript框架,用於構建用戶界面。它的核心優勢包括:1.響應式數據綁定,數據變化自動更新視圖;2.組件化開發,UI可拆分為獨立、可複用的組件。

Netflix使用React作為其前端框架。 1)React的組件化開發模式和強大生態系統是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優化了渲染效率和用戶交互管理。

Netflix在前端技術上的選擇主要集中在性能優化、可擴展性和用戶體驗三個方面。 1.性能優化:Netflix選擇React作為主要框架,並開發了SpeedCurve和Boomerang等工具來監控和優化用戶體驗。 2.可擴展性:他們採用微前端架構,將應用拆分為獨立模塊,提高開發效率和系統擴展性。 3.用戶體驗:Netflix使用Material-UI組件庫,通過A/B測試和用戶反饋不斷優化界面,確保一致性和美觀性。

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

Netflix在框架選擇上主要考慮性能、可擴展性、開發效率、生態系統、技術債務和維護成本。 1.性能與可擴展性:選擇Java和SpringBoot以高效處理海量數據和高並發請求。 2.開發效率與生態系統:使用React提升前端開發效率,利用其豐富的生態系統。 3.技術債務與維護成本:選擇Node.js構建微服務,降低維護成本和技術債務。

Netflix主要使用React作為前端框架,輔以Vue用於特定功能。 1)React的組件化和虛擬DOM提升了Netflix應用的性能和開發效率。 2)Vue在Netflix的內部工具和小型項目中應用,其靈活性和易用性是關鍵。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載
最受歡迎的的開源編輯器

禪工作室 13.0.1
強大的PHP整合開發環境