2019前端面試總結vue篇

1.Vue生命週期

vue生命週期就是從開始創建,初始化數據,編譯模板,掛載DOM,渲染->更新->渲染,銷燬等一系列過程。。生命週期鉤子如下:

組件實例週期

BeforeCreate:實例初始化後,無法訪問方法和數據;

Created:實例創建完成,可訪問數據和方法,注意,假如有某些數據必須獲取才允許進入頁面的話,並不適合;

beforeMonut:掛載DOM之前

Mounted :el被新創建的vm.$el替換,可獲取dom,改變data,注意,beforeRouterEnter的next的鉤子比mountend觸發靠後;

beforeUpdate:數據更新時調用,發生在虛擬DOM重新渲染前;

Updated:數據更改後,可以執行依賴於DOM的操作,注意,應該避免在此期間更改狀態,可能會導致更新無限循環;

beforeDestroy:實例銷燬之前,這一步還可以用this獲取實例,一般在這一步做重置操作,比如清定時器監聽dom事件;

Destroyed:實例銷燬後,會解除綁定,移除監聽。

2.對Vue3有什麼看法 ?會不會typeScript?

 

 

3、談談你對 keep-alive 的瞭解?

包裹動態組件時,會緩存不活動的組件實例,主要用於保留組件狀態或避免重新渲染;

1.路由組件中定義meta:{keepAlive:true/false}是否緩存

2.根目錄中:

<keep-alive><router-view v-if=”$route.meta.keepAlive”></router-view></keep-alive>

<keep-alive><router-view v-if=” ! $route.meta.keepAlive”></router-view></keep-alive>

4.Vue數據雙向綁定原理

通過數據劫持結合發佈訂閱模式來實現的,語法主要有{{}}和v-model。

***(首先用遞歸方法遍歷所有的屬性值,再用Object.defineProperty()給屬性綁定getter和setter方法添加一個observe(val)監聽器對數據進行劫持監聽;然後創建一個訂閱器來在getter裏收集訂閱者並創建和綁定watcher,如果數據變化,訂閱者就會執行自己對應的更新函數;watcher就是在自身實例化的時候往訂閱器裏添加自己,自身必須有一個update的數據,是監聽器和模板渲染的通信橋樑;最後創建解析模板指令compile,替換數據,初始化視圖。最終observer來監聽自己的model數據變化通過compile解析編譯模板指令,利用watcher搭起observer和compile之間的通信橋樑,達到數據變化->視圖更新雙向綁定效果。)

(vue實現數據雙向綁定主要是:採用數據劫持結合發佈者-訂閱者模式的方式。

通過Object.defineProperty()來劫持各個屬性的setter,getter,在數據變動時發佈消息給訂閱者,觸發相應監聽回調。

當把一個普通 Javascript 對象傳給 Vue 實例來作爲它的 data 選項時。

Vue 將遍歷它的屬性,用 Object.defineProperty 將它們轉爲 getter/setter。

用戶看不到 getter/setter,但是在內部它們讓 Vue 追蹤依賴,在屬性被訪問和修改時通知變化。

vue的數據雙向綁定 將MVVM作爲數據綁定的入口,整合Observer,Compile和Watcher三者。

通過Observer來監聽自己的model的數據變化,通過Compile來解析編譯模板指令(vue中是用來解析 {{}})。

最終利用watcher搭起observer和Compile之間的通信橋樑,達到數據變化 —>視圖更新;

視圖交互變化(input)—>數據model變更雙向綁定效果。

js實現簡單的雙向綁定)

5.路由鉤子

全局路由鉤子:

router.beforeEach((to,from,next)=>{...next})

router.afterEach()

組件路由鉤子:

beforeRouterEnter(to,from,next){

next(vm=>{...});

}

beforeRouterLeave(to,from,next){

next(vm=>{...});

}

beforeRouterUpdate(to,from,next){

next(vm=>{...});

}

六.Vuex中actions和mutations的區別

Mutations的更改是同步更改,用於用戶執行直接數據更改,this.$store.commit(‘名’)觸發

Actions的更改是異步操作,用於需要與後端交互的數據更改,this.$store.dispath(“名”)觸發

注意:

1):定義actions方法創建一個更改函數時,這個函數必須攜帶一個context參數,用於觸發mutations方法,context.commit(‘修改函數名’ , ’異步請求值’);

2):mutations第一個參數必須傳入state,第二個參數是新值

7.Vuerouter模式hash#問題

(1)vue的基本原理

(2)hash模式

2.history模式

 

 

 

參考:https://blog.csdn.net/qq_36772866/article/details/82947766

8.對組件化開發的理解

一般來說組件組件可以分爲三類:

  • 頁面級別的組件 (home.vue)
  • 業務上可以複用的組件 (自己寫的)
  • 與業務無關的組件 (ui組件)

組件開發三要素
prop,自定義事件,slot是組成組件的三個重要因素。

  1. prop用於定義組件的屬性。
  2. 自定義事件用於觸發組件的事件。
  3. slot用於組件功能的擴展。

通過合理的使用這三個API,可以更好地幫助我們開發組件。

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章