前端面试之Vue相关总结
生活随笔
收集整理的這篇文章主要介紹了
前端面试之Vue相关总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Vue2中檢測數(shù)組變化的限制和解決方法
vue2用下標設置數(shù)組沒效果
vue2設置數(shù)組長度沒效果
Vue nextTick
Vue渲染是異步渲染,添加元素時不會馬上渲染,而是到下一個tick才渲染。 nextTick的回調會在dom異步渲染完畢后執(zhí)行(vue是組件級的,若一有數(shù)據就更新性能肯定不好)。并且vue是批量做渲染的 在外部添加3個 在nextTick里獲取個數(shù) 只會打印一次
nextTick的實現(xiàn)
- 如果支持promise,將回調放在then方法里
- 若不,若支持MutationObserver,就xxx也是異步執(zhí)行的
- 若不,若支持setImmediate
- 再不,setTimeout
computed method watch區(qū)別
- method用在視圖上,每次都去執(zhí)行,開銷大,而computed是具備緩存的,若依賴的屬性無變化,不計算
Vue Plugin
- 全局方法 Vue.xx訪問
- 全局指令
- mixin
- 原型上綁定方法 Vue實例this訪問
- 導出插件,在main.js里use
Vue組件data返回函數(shù)
- Vue組件可能存在多個實例,如果使用對象形式定義data,會導致他們共用一個data對象,那么狀態(tài)變更將會影響所有組件實例;采用函數(shù)形式定義,在initData時會將其作為工廠函數(shù)返回全新的data對象,有效規(guī)避多實例之間狀態(tài)污染問題。而Vue根實例只能有一個,不會有次問題。
加key 高效更新dom
- 不使用key,更新時不知道每個元素的位置,所以在A更新A,B更新B,C更新為F,以此類推,實際更新了3次,從F開始FCD + 創(chuàng)建插入E (源碼中,每次循環(huán)認為這5對是sameVnode,只能每次都去更新。而加了key能精準判斷是否是相同節(jié)點)
- 使用key,只做了一次創(chuàng)建F并插入到C前面的操作(比較時,比較首位元素是否相同)
源碼
-
沒有設置key時,key的值是undefined,兩個未設置key的標簽值被判斷為相同
-
diff算法不是最優(yōu),增加key優(yōu)化了diff,降低復雜度
-
加key
index作為key
- 在數(shù)據會增減時可能會產生問題,在頭部插入,在中間刪除(數(shù)量變化,index是在變的)
- random作為key,隨機數(shù)還是有可能是一樣的
vue-router的原理
- vue-router通過hash與History interface兩種方式實現(xiàn)前端路由,更新視圖但不重新請求頁面”是前端路由原理的核心
- history模式則會將URL修改得就和正常請求后端的URL一樣,如后端沒有配置對應/user/id的路由處理,則會返回404錯誤
- 它提供mode參數(shù)
- hash帶# new HashHistory 是基于location.hash來實現(xiàn)的。Location.hash的值就是URL中#后面的內容。當hash改變時,頁面不會因此刷新,瀏覽器也不會請求服務器。
- history更像url new HTML5History
update beforeUpdate
總結:
- 不能籠統(tǒng)地說能修改或不能修改數(shù)據
- 修改的數(shù)據未渲染到視圖不會觸發(fā)這2個鉤子
- this.msg = this.msg + 1是有可能引起死循環(huán)的操作
- beforeUpdate修改視圖數(shù)據不會再次觸發(fā)beforeUpdate 即使++也沒關系
- updated修改視圖數(shù)據為常量,會再觸發(fā)一輪beforeUpdate → update;因此,若在此生命周期++會死循環(huán)
總結
以上是生活随笔為你收集整理的前端面试之Vue相关总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 精心梳理二十二道常见SSM面试题(带答案
- 下一篇: linux安装mysql 5.6_lin