vue學習大全

Vue面試題

https://blog.csdn.net/qq_44182284/article/details/111191455

https://blog.csdn.net/weixin_43288714/article/details/115668583?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-19-115668583-blog-94400698.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-19-115668583-blog-94400698.pc_relevant_aa&utm_relevant_index=23

http://www.reibang.com/p/85a4fcd3de98

https://juejin.cn/post/6961222829979697165

單頁面應(yīng)用****spa****(過)

  1. 在web頁面加載完html屡萤,js回梧,css后手素,由路由機制實現(xiàn)html頁面內(nèi)容變換

  2. 優(yōu)點是用戶體驗好窘拯,頁面不需要重新加載或者跳轉(zhuǎn),前后端分離

  3. 缺點:首次加載慢躲株,頁面前進后退路由管理片部,SEO 難度較大

什么是 MVVM?(練2)

  1. MVVM 是是 Model-View-ViewModel 的縮寫

  2. Model 代表數(shù)據(jù)模型霜定, 定義數(shù)據(jù)操作的業(yè)務(wù)邏輯

  3. View 代表 UI 組件档悠, 它負責將數(shù)據(jù)模型轉(zhuǎn)化成 UI 展現(xiàn)出來

  4. ViewModel 通過雙向綁定把 View 和Model 進行同步交互,不需要手動操作 DOM 的一種設(shè)計思想

請說說雙向綁定實現(xiàn)的原理然爆?(練2)

  1. vue實現(xiàn)雙向數(shù)據(jù)綁定主要是通過數(shù)據(jù)劫持并結(jié)合(發(fā)布者-》訂閱者)的方式

  2. 主要實現(xiàn)的方法是通過object.defineproperty()來劫持各個屬性的setter站粟,getter方法,在數(shù)據(jù)變動的時候發(fā)布消息給訂閱者曾雕,觸發(fā)相應(yīng)的監(jiān)聽回調(diào)

為什么data是個函數(shù)并且返回一個對象呢奴烙?(過)

  1. 因為一個組件可能會多處調(diào)用,而每一次調(diào)用就會執(zhí)行data函數(shù)并返回新的數(shù)據(jù)對象剖张,

  2. 這樣做可以避免多處調(diào)用組件間的數(shù)據(jù)污染

v-model的原理是什么(練2)

v-model本質(zhì)就是一個語法糖切诀,可以看成是value + input方法的語法糖。 可以通過model屬性的prop和event屬性來進行自定義搔弄。原生的v-model幅虑,會根據(jù)標簽的不同生成不同的事件和屬性

(text 和 textarea 元素使用 value property 和 input 事件;

checkbox 和 radio 使用 checked property 和 change 事件顾犹;

v-show 和 v-if 指令的共同點和不同點倒庵。(過)

  1. v-show是通過display來控制顯示隱藏

  2. v-if是操作dom元素來控制顯示隱藏

  3. 如果需要非常頻繁地切換,則使用 v-show 較好

computed 和 watch 的區(qū)別和運用的場景炫刷?(練2)

  1. computed 具有返回值擎宝,具有緩存,依賴其他屬性進行計算返回浑玛,

使用場景:當我們要進行數(shù)值計算,而且依賴于其他數(shù)據(jù)绍申,那么把這個數(shù)據(jù)設(shè)計為computed

  1. watch的值必須先在data中定義,當值發(fā)生改變觸發(fā)watch,然后進行邏輯處理极阅,可以做異步操作胃碾,watch接收兩個參數(shù)newvalu和oldvalue

使用場景:如果你需要在某個數(shù)據(jù)變化時做一些事情,使用watch來觀察這個數(shù)據(jù)變化

Vue生命周期(過)

  1. 創(chuàng)建前筋搏,可以在這加個 loading 事件仆百,在加載實例時觸發(fā)。

  2. 創(chuàng)建后奔脐,在這結(jié)束 loading 事件儒旬,異步請求也放在這里調(diào)用。

  3. 掛載前

  4. 掛載后帖族,掛載元素,獲取到 DOM 節(jié)點挡爵。

  5. 更新前

  6. 更新后竖般,如果對數(shù)據(jù)統(tǒng)一處理,在這里寫上相應(yīng)函數(shù)

  7. 銷毀前茶鹃,可以做一個確認停止事件的確認框涣雕。

  8. 銷毀后

  9. activated keep-alive 專屬,組件被激活時調(diào)用

  10. deactivated keep-alive 專屬闭翩,組件被銷毀時調(diào)用

  11. beforeCreate 挣郭,可以在這加個 loading 事件,在加載實例時觸發(fā)疗韵。

  12. created 兑障,在這結(jié)束 loading 事件,異步請求也放在這里調(diào)用蕉汪。

  13. beforeMount

  14. Mounted流译,掛載元素,獲取到 DOM 節(jié)點者疤。

  15. beforeUpdate

  16. updated 福澡,如果對數(shù)據(jù)統(tǒng)一處理,在這里寫上相應(yīng)函數(shù)

  17. beforeDestroy 驹马,可以做一個確認停止事件的確認框革砸。

  18. destroyed

  19. activated keep-alive 專屬,組件被激活時調(diào)用

  20. deactivated keep-alive 專屬糯累,組件被銷毀時調(diào)用

第一次頁面加載會觸發(fā)哪幾個鉤子算利?(過) 第一次頁面加載時會觸發(fā) 創(chuàng)建前后,掛載前后 這幾個鉤子

DOM 渲染在****哪個周期中就已經(jīng)完成寇蚊?(過) DOM 渲染在 mounted 中就已經(jīng)完成了笔时。

深度監(jiān)聽怎么做(過)

watch 里面的deep屬性設(shè)置為true

Vue 的父組件和子組件生命周期鉤子函數(shù)執(zhí)行順序?(過)

Vue 父子組件生命周期鉤子的執(zhí)行順序遵循:從外到內(nèi)仗岸,再從內(nèi)到外允耿。

  1. 加載渲染過程

父更新前 -> 父更新后 -> 父掛載前 -> 子更新前 -> 子更新后 -> 子掛載前 -> 子掛載后 -> 父掛載后

  1. 子組件更新過程

父更新前 -> 子更新前 -> 子更新后 -> 父更新后

  1. 父組件更新過程

父更新前-> 父更新后

  1. 銷毀過程

父銷毀前-> 子銷毀前 -> 子銷毀后-> 父銷毀后

Vue****組件間通信(練****2****)

  1. v-model

  2. attrs /listeners

  3. vuex

  4. $root(可以拿到根組件的屬性和方法)

  5. Props(常用)(子組件通過props接收父組件傳遞過來的數(shù)據(jù))

  6. provide/inject(父組件通過provide方法定義方法或者屬性借笙,子組件通過inject接收方法和屬性)

  7. Emit(子組件通過emit發(fā)送事件給父組件,父組件通過回調(diào)函數(shù)接收數(shù)據(jù))

  8. ref(父組件可以通過ref拿到子組件的屬性和方法)

  9. slot(子組件的數(shù)據(jù)通過插槽的方式傳給父組件使用)

  10. eventBus(通過Bus.emit發(fā)送事件较锡,通過Bus.on監(jiān)聽事件)

  11. children /parent(通過this.children獲取子組件的方法和屬性业稼,通過this.parent獲取父組件的方法和屬性)

https://juejin.cn/post/6999687348120190983#heading-13

Vue****單向數(shù)據(jù)流

1. 單向數(shù)據(jù)流就是model的更新會觸發(fā)view的更新,view的更新不會觸發(fā)model的更新蚂蕴,它們的作用是單向的

Keep-alive****組件(過)

  1. keep-alive 可以實現(xiàn)組件緩存低散,當組件切換時不會對當前組件進行卸

  2. Keep-alive有3個屬性,include骡楼,exclude 熔号,max,代表匹配的組件會不會被緩存鸟整,還有緩存多少組件實例

  3. keep-alive觸發(fā)的生命周期有activated 引镊,deactivated

Vue****檢測對象或者數(shù)組的變化(練****1****)

  1. vue可以監(jiān)測數(shù)組變化的方法有七種 pop 、 push 篮条、 shift 弟头、 unshift 、 splice 涉茧、 sort 赴恨、 reverse

  2. Vue 無法檢測到對象屬性的添加或刪除,或者通過下標改變數(shù)組的值

  3. 我們可以使用Vue.set(object, key, value)來設(shè)置值的改變而被vue監(jiān)聽到

Vue****中****key****的作用(練****1****)

Keys 是是vue用于追蹤列表中的元素被刪除伴栓,添加伦连,修改的輔助標識,可以避免元素不必要的重復渲染

NextTick****的原理使用場景(練****2****)

  1. NextTick作用在下一次dom更新結(jié)束后執(zhí)行他指定的回調(diào)

  2. 使用就是當數(shù)據(jù)改變后挣饥,要基于更新后的新dom進行一些操作的時候除师,可以把邏輯寫在nexttick指定的回調(diào)函數(shù)中

  3. 比如在點擊編輯的時候更改了數(shù)據(jù)的狀態(tài)后需要對一個input框獲取焦點,可以吧這一段邏輯寫入nextTick中

Vuex

  1. vuex是vue團隊提供的一個狀態(tài)管理工具扔枫,

  2. vuex的使用場景多個組件共享數(shù)據(jù)或者是跨組件傳遞數(shù)據(jù)時

vuex****的****5****種屬性(練****1****)

  1. state:vuex的基本數(shù)據(jù)汛聚,用來存儲變量

  2. geeters:當state中的數(shù)據(jù)需要加工后再使用時,可以通過getters加工短荐,和計算屬性一樣具有返回值

  3. mutation:通過commit提交數(shù)據(jù)來變更state的值倚舀,每個 mutation 都有一個字符串的 事件類型 (type) 和 一個 回調(diào)函數(shù) ,回調(diào)函數(shù)接收一個state合集和commit過來的value

  4. action:和mutation的功能大致相同忍宋,不一樣的地方是1. Action 提交的是 mutation痕貌,而不是直接變更狀態(tài)。 2. Action 可以包含任意異步操作糠排。3.action是通過dispatch提交type和value來變更state

  5. modules:模塊化vuex舵稠,可以讓每一個模塊擁有自己的state、mutation、action哺徊、getters,使得結(jié)構(gòu)非常清晰室琢,方便管理。

Vuex****的流程是

Vue-router****的兩種模式

  1. 路由模式有2種落追,hash和history模式

  2. hash值不會帶給服務(wù)器盈滴,#號后的內(nèi)容就是hash值,hash值兼容性更好轿钠,我們開發(fā)中使用的就是hash值

  3. history模式的url更簡潔巢钓,兼容性沒有hash模式好

Vue-router****有哪幾種導航鉤子和路由守衛(wèi)

  1. 全局守衛(wèi)(router.beforeEach,router.afterEach)

  2. 路由獨享守衛(wèi)(beforeEnter)

  3. 路由組件內(nèi)的守衛(wèi)(beforeRouteEnter疗垛,beforeRouteLeave )

  4. (to, from, next)

你都做過哪些****Vue****的性能優(yōu)化

編碼階段

  1. 盡量減少data中的數(shù)據(jù)症汹,data中的數(shù)據(jù)都會增加getter和setter,會收集對應(yīng)的watcher

  2. v-if和v-for不能連用

  3. 如果需要使用v-for給每項元素綁定事件時使用事件代理

  4. SPA 頁面采用keep-alive緩存組件

  5. 在更多的情況下贷腕,使用v-if替代v-show

  6. key保證唯一

  7. 使用路由懶加載烈菌、異步組件

  8. 防抖、節(jié)流

  9. 第三方模塊按需導入

  10. 長列表滾動到可視區(qū)域動態(tài)加載

  11. 圖片懶加載

SEO****優(yōu)化

  1. 預(yù)渲染

  2. 服務(wù)端渲染SSR

打包優(yōu)化

  1. 壓縮代碼

  2. Tree Shaking/Scope Hoisting

  3. 使用cdn加載第三方模塊

  4. 多線程打包happypack

  5. splitChunks抽離公共文件

  6. sourceMap優(yōu)化

用戶體驗

  1. 骨架屏

  2. PWA

Mixin****和****Mixins****的區(qū)別

Vue****動態(tài)組件

Vue****中局部作用域樣式花履、

Vue3.0****雙向綁定原理

v-if和v-for一起使用的弊端及解決辦法

由于v-for的優(yōu)先級比v-if高,所以導致每循環(huán)一次就會去v-if一次挚赊,而v-if是通過創(chuàng)建和銷毀dom元素來控制元素的顯示與隱藏诡壁,所以就會不停的去創(chuàng)建和銷毀元素,造成頁面卡頓荠割,性能下降妹卿。

解決辦法:

  1. 在v-for的外層或內(nèi)層包裹一個元素來使用v-if

  2. 用computed處理

Vue的優(yōu)點?Vue的缺點蔑鹦?

  1. 組件化夺克,輕量級,虛擬dom嚎朽,響應(yīng)式铺纽,單頁面路由,數(shù)據(jù)與視圖分開

  2. 頁面不利于seo哟忍,不支持IE8以下狡门,首屏加載時間長

Vue跟React的異同點

相同點:

  1. 都使用了虛擬dom

  2. 組件化開發(fā)

  3. 都是單向數(shù)據(jù)流(父子組件之間,不建議子修改父傳下來的數(shù)據(jù))

  4. 都支持服務(wù)端渲染

不同點:

  1. React的JSX锅很,Vue的template

  2. 數(shù)據(jù)變化其馏,React手動(setState),Vue自動(初始化已響應(yīng)式處理爆安,Object.defineProperty)

  3. React單向綁定叛复,Vue雙向綁定

  4. React的Redux,Vue的Vuex

列表渲染中 key的作用

方便diff 算法快速找到變更的元素,然后進行相應(yīng)的 DOM 更新

組件間的通信(基本是必問題)

父子組件:子組件通過 Props 接收父組件傳入的值褐奥,如果父組件想拿到子組件的數(shù)據(jù)咖耘,可通過 $emit 一個事件,將數(shù)據(jù)當參數(shù)傳遞出去抖僵,然后父組件通過事件監(jiān)聽接收

兄弟組件:

  1. 通過找到共同的父級組件鲤看,然后通過 $emit 將數(shù)據(jù)傳遞到父級組件,都從父級組件取數(shù)據(jù)

  2. Vuex全局數(shù)據(jù)共享

  3. 通過 Vue 全局事件總線耍群,不過因為 vue 3 已經(jīng)廢棄了 this.on, this.off 這些全局 API义桂,所以在 vue3中已經(jīng)無法使用全局事件總線了,可以通過方法 4 解決

  4. 使用第三方 PubSub 工具

Provide/Inject:只適用于父子級或者祖孫級或者更深層次嵌套中蹈垢,父級組件向子級組件傳值

$nextTick 的作用

Vue 2 中數(shù)組是無法實現(xiàn)響應(yīng)式的慷吊,需要通過 $set 手動實現(xiàn)

自定義全局 API

通過給 Vue 原型綁定方法實現(xiàn),不過同樣的此方法不適用于 Vue3曹抬,在 Vue 3中通過給app實例config 配置全局屬性

Vue2.x =è Vue.prototype.customMethod = function() {}

Vue3.x è app.config.globalProperties

Vue2Vue3不同點

自定義指令

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溉瓶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子谤民,更是在濱河造成了極大的恐慌堰酿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件张足,死亡現(xiàn)場離奇詭異触创,居然都是意外死亡,警方通過查閱死者的電腦和手機为牍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門哼绑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碉咆,你說我怎么就攤上這事抖韩。” “怎么了疫铜?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵茂浮,是天一觀的道長。 經(jīng)常有香客問我壳咕,道長励稳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任囱井,我火速辦了婚禮驹尼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庞呕。我一直安慰自己新翎,他們只是感情好程帕,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著地啰,像睡著了一般愁拭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亏吝,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天岭埠,我揣著相機與錄音,去河邊找鬼蔚鸥。 笑死惜论,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的止喷。 我是一名探鬼主播馆类,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弹谁!你這毒婦竟也來了乾巧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤预愤,失蹤者是張志新(化名)和其女友劉穎沟于,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體植康,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡社裆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了向图。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡标沪,死狀恐怖榄攀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情金句,我是刑警寧澤檩赢,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站违寞,受9級特大地震影響贞瞒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜趁曼,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一军浆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挡闰,春花似錦乒融、人聲如沸掰盘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愧捕。三九已至,卻和暖如春申钩,著一層夾襖步出監(jiān)牢的瞬間次绘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工撒遣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邮偎,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓愉舔,卻偏偏與公主長得像钢猛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子轩缤,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容