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
是組成組件的三個重要因素。
prop
用於定義組件的屬性。- 自定義事件用於觸發組件的事件。
slot
用於組件功能的擴展。
通過合理的使用這三個API,可以更好地幫助我們開發組件。