本次給大家分享一些關(guān)于Vue的常見(jiàn)面試題,帶你梳理基礎(chǔ)知識(shí),增強(qiáng)Vue知識(shí)儲(chǔ)備,值得收藏,快來(lái)看看吧!
如何快速入門(mén)VUE3.0:進(jìn)入學(xué)習(xí)
分享的是一些Vue的常見(jiàn)面試題,是不代表全部。如果文章有不對(duì)的地方歡迎指出,有疑惑 或者有其他面試題的小伙伴也可以在評(píng)論區(qū)留言分享,大家一起交流探討,謝謝!
1. vue2.0組件通信?式有哪些?
-
父子組件通信:
props
和event
、v- model
、.sync
、ref
、$parent
和$children
。(學(xué)習(xí)視頻分享:vue視頻教程) -
非父子組件通信:
$attr
和$listeners
、provide
和inject
、eventbus
、通過(guò)根實(shí)例$root
訪問(wèn)、vuex
、dispatch
和brodcast
2. v-model是如何實(shí)現(xiàn)雙向綁定的?
-
vue 2.0
v-model
是?來(lái)在表單控件或者組件上創(chuàng)建雙向綁定的,他 的本質(zhì)是v-bind
和v-on
的語(yǔ)法糖,在 ?個(gè)組件上使?v-model
,默認(rèn)會(huì)為組件綁定名為value
的prop
和名為input
的事件。 -
Vue3.0 在 3.x 中,?定義組件上的
v-model
相當(dāng)于傳遞了modelValue prop
并接收拋出的update:modelValue
事件
3. Vuex和單純的全局對(duì)象有什么區(qū)別?
Vuex和全局對(duì)象主要有兩種區(qū)別:
-
Vuex 的狀態(tài)存儲(chǔ)是響應(yīng)式的。當(dāng) Vue 組件從 store 中讀取狀態(tài)的時(shí)候,若 store 中的狀態(tài)發(fā)?變 化,那么相應(yīng)的組件也會(huì)相應(yīng)地得到?效更新。
-
不能直接改變 store 中的狀態(tài)。改變 store 中的狀態(tài)的唯?途徑就是顯式地提交 (commit)mutation。這樣使得我們可以?便地跟蹤每?個(gè)狀態(tài)的變化,從?讓我們能夠?qū)崿F(xiàn)?些? 具幫助我們更好地了解我們的應(yīng)?。
4. Vue 的?組件和?組件?命周期鉤?執(zhí)?順序是什么?
渲染過(guò)程:?組件掛載完成?定是等?組件都掛載完成后,才算是?組件 掛載完,所以?組件的mounted在?組件mouted之后
?beforeCreate -> ?created -> ?beforeMount -> ?beforeCreate -> ?created -> ?beforeMount -> ?mounted -> ?mounted
?組件更新過(guò)程:
- 影響到?組件: ?beforeUpdate -> ?beforeUpdate->?updated -> ? updted
- 不影響?組件: ?beforeUpdate -> ?updated
?組件更新過(guò)程:
- 影響到?組件: ?beforeUpdate -> ?beforeUpdate->?updated -> ? updted
- 不影響?組件: ?beforeUpdate -> ?updated
銷(xiāo)毀過(guò)程:?beforeDestroy -> ?beforeDestroy -> ? destroyed -> ?destroyed
看起來(lái)很多好像很難記憶,其實(shí)只要理解了,不管是哪種情況,都?定是?組件等待?組件完 成后,才會(huì)執(zhí)???對(duì)應(yīng)完成的鉤?,就可以很容易記住
5. v-show 和 v-if 有哪些區(qū)別?
-
v-if
會(huì)在切換過(guò)程中對(duì)條件塊的事件監(jiān)聽(tīng)器和?組件進(jìn)?銷(xiāo)毀和重建,如果初始條件是false,則什么都不做,直到條件第?次為true時(shí)才開(kāi)始渲 染模塊。 -
v-show
只是基于css進(jìn)?切換,不管初始條件是 什么,都會(huì)渲染。
所以, v-if
切換的開(kāi)銷(xiāo)更?,? v-show
初始化渲染開(kāi)銷(xiāo)更 ?,在需要頻繁切換,或者切換的部分dom很復(fù)雜時(shí),使? v-show
更合 適。渲染后很少切換的則使? v-if
更合適。
6. Vue 中 v-html 會(huì)導(dǎo)致什么問(wèn)題
在?站上動(dòng)態(tài)渲染任意 HTML,很容易導(dǎo)致 XSS 攻擊。所以只能在可信內(nèi) 容上使? v-html,且永遠(yuǎn)不能?于?戶提交的內(nèi)容上。
7. v-for 中 key 的作?是什么?
key
是給每個(gè) vnode
指定的唯? id
,在同 級(jí)的 vnode
diff 過(guò)程中,可以根據(jù) key
快速的對(duì)?,來(lái)判斷是 否為相同節(jié)點(diǎn),并且利? key
的唯?性可以?成 map
來(lái)更快的獲 取相應(yīng)的節(jié)點(diǎn)。
另外指定 key
后,就不再采?“就地復(fù)?”策略了,可以保證渲染的準(zhǔn)確性 。
8. 為什么 v-for 和 v-if 不建議?在?起
- 當(dāng)
v-for
和v-if
處于同?個(gè)節(jié)點(diǎn)時(shí),v- for
的優(yōu)先級(jí)?v-if
更?,這意味著v-if
將分別重復(fù) 運(yùn)?于每個(gè)v-for
循環(huán)中。如果要遍歷的數(shù)組很?,?真正要展示的數(shù)據(jù)很少時(shí) ,這將造成很?的性能浪費(fèi)。 - 這種場(chǎng)景建議使?
computed
,先對(duì)數(shù)據(jù)進(jìn)?過(guò)濾。
9. vue-router hash 模式和 history 模式有什么區(qū)別?
區(qū)別:
-
url 展示上,hash 模式有 "#",history 模式?jīng)]有
-
刷新??時(shí),hash 模式可以正常加載到 hash 值對(duì)應(yīng)的??,? history 沒(méi)有處 理的話,會(huì)返回404,?般需要后端將所有??都配置重定向到??路由。
-
兼容性。hash 可以?持低版本瀏覽器和 IE
10. vue-router hash 模式和 history 模式是如何實(shí)現(xiàn)的?
- hash 模式:
#
后? hash 值的變化,不會(huì)導(dǎo)致瀏覽器向服務(wù)器發(fā)出請(qǐng)求,瀏覽器不發(fā)出請(qǐng) 求,就不會(huì)刷新??。同時(shí)通過(guò)監(jiān)聽(tīng) hashchange 事件可以知道 hash 發(fā)?了哪些變化,然后根據(jù) hash 變化來(lái)實(shí)現(xiàn)更新??部分內(nèi)容的操作。
- history 模式:
history 模式的實(shí)現(xiàn),主要是 HTML5 標(biāo)準(zhǔn)發(fā)布的兩個(gè) API, pushState
和 replaceState
,這兩個(gè) API 可以在改變 url,但是不會(huì)發(fā)送請(qǐng)求。這樣就可以監(jiān) 聽(tīng) url 變化來(lái)實(shí)現(xiàn)更新??部分內(nèi)容的操作。
11. vue3.0 相對(duì)于 vue2.x 有哪些變化?
- 監(jiān)測(cè)機(jī)制的改變(Object.defineProperty —> Proxy)
- 模板
- 對(duì)象式的組件聲明?式 (class)
- 使?ts
- 其它??的更改:?持?定義渲染器、 ?持 Fragment(多個(gè)根節(jié)點(diǎn))和 Protal(在 dom 其他部分渲染組建內(nèi)容)組件、基于 treeshaking 優(yōu)化,提供了