Vue 必考題

Vue2

一、vue2的生命周期鉤子有哪些倾鲫?數(shù)據(jù)請求放在哪個鉤子?

生命周期鉤子:

創(chuàng)建:
beforeCreate – 數(shù)據(jù)data初始化前
created – 數(shù)據(jù)data初始化之后
掛載:
beforeMount – 數(shù)據(jù)準備渲染(此時data和template生成了html但還未在頁面中渲染)
Mounted – 數(shù)據(jù)渲染完成(模板的html已經渲染到了頁面刻撒,且只執(zhí)行一次)
更新:實時監(jiān)控數(shù)據(jù)變化什湘,隨時更新DOM
beforeUpdate – 數(shù)據(jù)更新前
updated – 數(shù)據(jù)更新
銷毀:
beforeDestroy – Vue實例銷毀之前執(zhí)行
destroyed – Vue實例銷毀之后執(zhí)行

還有三個不常用
緩存:
activated:被keep-alive緩存的組件激活時調用。
deactivated:被keep-alive緩存的組件失活時調用赎离。
錯誤處理
errorCaptured:組件或組件的后代發(fā)生錯誤調用逛犹。

數(shù)據(jù)請求放在 mounted 里面,因為放在其他地方都不合適(xjb扯)梁剔。
為什么不放在created里面虽画?
SSR
如果放到created里面,會在后端執(zhí)行一次荣病,前端執(zhí)行一次码撰。
SSR會執(zhí)行created。把組件放到前端時再執(zhí)行一次created个盆。

二脖岛、Vue2組件間通信的方式有哪些?

父子組件:使用「props 和事件」進行通信詳情

爺孫組件:
使用兩次父子組件間通信來實現(xiàn)
使用「provide + inject」來通信

任意組件:使用 eventBus = new Vue() 來通信
主要API 是 eventBus.on 和 eventBus.emit
缺點是事件多了就很亂颊亮,難以維護
使用 Event Bus 實現(xiàn)兄弟組件通信【Vue 小技巧】_嗶哩嗶哩_bilibili

任意組件:使用 Vuex 通信(Vue 3 可用 Pinia 代替 Vuex)

三柴梆、Vuex用過嗎?怎么理解终惑?

1绍在、背下文檔第一句:Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式 + 庫

2、說出核心概念的名字和作用:store/State/Getter/Mutation/Action/Module
store 是個大容器雹有,包含以下所有內容
State 用來讀取狀態(tài)偿渡,帶有一個 mapState 輔助函數(shù)
Getter 用來讀取派生狀態(tài)(你讀的東西是計算出來的,比如名字加年齡)件舵,附有一個 mapGetters 輔助函數(shù)
Mutation 用于同步提交狀態(tài)變更卸察,附有一個 mapMutations 輔助函數(shù)
Action 用于異步變更狀態(tài)脯厨,但它提交的是 mutation铅祸,而不是直接變更狀態(tài)。
Module 用來給 store 劃分模塊合武,方便維護代碼
常見追問:Mutation 和 Action 為什么要分開临梗?
答案:為了讓代碼更易于維護。(可是 Pinia 就把 Mutation 和 Action 合并了呀)
如果反問為啥Pinia把他們合并了:減少一些概念稼跳,讓代碼更容易理解盟庞。

復雜是為了維護簡單是為了理解 萬能答案。

四汤善、VueRouter用過嗎什猖?怎么理解票彪?

1、背下文檔第一句:Vue Router 是 Vue.js 的官方路由不狮。它與 Vue.js 核心深度集成降铸,讓用 Vue.js 構建單頁應用變得輕而易舉。

2摇零、說出核心概念的名字和作用:router-link(點擊跳轉) router-view(容納路由視圖) 嵌套路由(路由加一個child路由里面還有路由推掸,子路由渲染到router-view中)、Hash 模式和 History 模式驻仅、導航守衛(wèi)谅畅、懶加載

常見追問:

Hash 模式和 History 模式的區(qū)別?
一個用的 URL的Hash噪服,一個用的HTML5的 History API
哈希模式不需要后端 nginx 配合(把所有的HTML請求都重定向到index)毡泻,一個需要后端配合

導航守衛(wèi)如何實現(xiàn)登錄控制?
router.beforeEach((to, from, next) => {
if (to.path === '/login') return next()//如果是登錄頁面直接放行
//你想去受控頁面但是又沒有登錄我給你重定向到登錄頁面
if (to是受控頁面 && 沒有登錄) return next('/login')
//如果你不是受控頁面或者已經登錄了直接next放行
next()
})

導航守衛(wèi)就是每一個路由都可以設置一個鉤子芯咧,進入離開路由以及在路由解析的時候做什么牙捉。

import(‘APP’)importAPP組件
加括號把這個組件放到路由里面這就是懶加載。

https://blog.csdn.net/sinat_36521655/article/details/106125910

五敬飒、Vue2 如何實現(xiàn)雙向綁定邪铲?

1、一般使用 v-model / .sync 實現(xiàn)无拗,
v-model 是 v-bind:value 和 v-on:input 的語法糖

  • v-bind:value 實現(xiàn)了 data ? UI 的單向綁定
  • v-on:input 實現(xiàn)了 UI ? data 的單向綁定
    加起來就是雙向綁定了

2带到、這兩個單向綁定是如何實現(xiàn)的呢?

  • v-bind:value通過 Object.defineProperty API 給 data每一個屬性遞歸的創(chuàng)建 getter 和 setter英染,用于監(jiān)聽 data 的改變揽惹,data 一變就會安排改變 UI
  • v-on:input通過 template compiler 給 DOM 添加事件監(jiān)聽,DOM input 的值變了就會去修改 data四康。

Vue3

一搪搏、Vue3為什么使用Proxy?

  • 彌補 Object.defineProperty 的兩個不足

    1. 動態(tài)創(chuàng)建的 data 屬性需要用 Vue.set 來賦值,Vue 3 用了 Proxy 就不需要了
    2. 基于性能考慮闪金,Vue 2 篡改了數(shù)組的 7 個 API疯溺,Vue 3 用了 Proxy 就不需要了
  • defineProperty 需要提前遞歸地遍歷 data 做到響應式,而 Proxy 可以在真正用到深層數(shù)據(jù)的時候再做響應式(惰性)

二哎垦、Vue 3 為什么使用 Composition API囱嫩?

答案參考尤雨溪的博客:Vue Function-based API RFC - 知乎 (zhihu.com)

  1. Composition API 比 mixins、高階組件漏设、extends墨闲、Renderless Components 等更好,原因有三:

    1. 模版中的數(shù)據(jù)來源不清晰郑口。
    2. 命名空間沖突鸳碧。
    3. 性能盾鳞。
  2. 更適合 TypeScript

二、Vue 3 與Vue2 對比做了哪些改動瞻离?

官方文檔寫了(中文在這)雁仲,這里列出幾個容易被考的:

  1. createApp() 代替了 new Vue()

  2. v-model 代替了以前的 v-model 和 .sync

  3. 根元素template 可以有不止一個元素了

  4. 新增 Teleport 傳送門

  5. destroyed 被改名為 unmounted 了(before 當然也改了)

  6. ref 屬性支持函數(shù)了

其他建議自己看看寫寫。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末琐脏,一起剝皮案震驚了整個濱河市攒砖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌日裙,老刑警劉巖吹艇,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昂拂,居然都是意外死亡受神,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門格侯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鼻听,“玉大人,你說我怎么就攤上這事联四〕挪辏” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵朝墩,是天一觀的道長醉拓。 經常有香客問我,道長收苏,這世上最難降的妖魔是什么亿卤? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮鹿霸,結果婚禮上排吴,老公的妹妹穿的比我還像新娘。我一直安慰自己懦鼠,他們只是感情好钻哩,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葛闷,像睡著了一般憋槐。 火紅的嫁衣襯著肌膚如雪双藕。 梳的紋絲不亂的頭發(fā)上淑趾,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音忧陪,去河邊找鬼扣泊。 笑死近范,一個胖子當著我的面吹牛,可吹牛的內容都是我干的延蟹。 我是一名探鬼主播评矩,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼阱飘!你這毒婦竟也來了斥杜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤沥匈,失蹤者是張志新(化名)和其女友劉穎蔗喂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體高帖,經...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡缰儿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了散址。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乖阵。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖预麸,靈堂內的尸體忽然破棺而出瞪浸,到底是詐尸還是另有隱情,我是刑警寧澤吏祸,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布默终,位于F島的核電站,受9級特大地震影響犁罩,放射性物質發(fā)生泄漏齐蔽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一床估、第九天 我趴在偏房一處隱蔽的房頂上張望含滴。 院中可真熱鬧,春花似錦丐巫、人聲如沸谈况。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碑韵。三九已至,卻和暖如春缎脾,著一層夾襖步出監(jiān)牢的瞬間祝闻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工遗菠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留联喘,地道東北人华蜒。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像豁遭,于是被迫代替她去往敵國和親叭喜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容

  • 前言 為了金三銀四的跳槽季做準備蓖谢,并且我是vue技術棧的捂蕴,所以整理了若干個vue的面試題。 每次看別人的博客闪幽,都會...
    93ac81ebff1e閱讀 220評論 0 1
  • 談一下你對 MVVM 的認識 https://blog.csdn.net/Dora_5537/article/de...
    Aniugel閱讀 9,600評論 1 91
  • 1启绰、說說你對 SPA 單頁面的理解,它的優(yōu)缺點分別是什么沟使? SPA( single-page applic...
    theAngryC4閱讀 1,209評論 1 2
  • Vue.js面試題整理 一委可、什么是MVVM? MVVM是Model-View-ViewModel的縮寫腊嗡。MVVM是...
    夏_fab2閱讀 7,670評論 1 4
  • Vue.js面試題整理 一着倾、什么是****MVVM****? MVVM是Model-View-ViewModel的...
    EmilWong閱讀 239評論 0 0