您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
01 vue的發布者和訂閱者是什么(vue面試題)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-07-26 14:56:15【】5人已围观
简介Vue雙向數據綁定原理分析--Dep(發布者,訂閱收集器)Dep是Observer與Watcher之間的紐帶,也可以認為Dep是服務于Observer的訂閱系統。Watcher訂閱某個Observer
Vue雙向數據綁定原理分析 -- Dep(發布者,訂閱收集器)
Dep是Observer與Watcher之間的紐帶,也 可以認為Dep是服務于Observer的訂閱系統 。Watcher訂閱某個Observer的Dep,當Observer觀察的數據發生變化時,通過Dep通知各個已經訂閱的Watcher。
Dep提供了幾個接口:
addSub 和 depend這兩個方法是用來關聯Watcher實例和Dep實例的,這兩種實例的關系是多對對的關系:
• 一個Dep實例可以關聯多個Watcher實例
• 一個Watcher實例可以關聯多個Dep實例
除了這些接口以外,Dep定義了兩個實例屬性和一個靜態屬性:
以上這些都很容易理解,難的在于dep.js里面還定義了一個targetStack的東西:
筆者本著求知的精神,千辛萬苦終于找到了大神的講解:
到此為止,我們就明白了Dep類的實現原理,下一篇我們將了解Watcher類的實現。
vue面試題
Model 層: 對應數據層的域模型,它主要做域模型的同步 。在層間關系⾥,它主要⽤于抽象出 ViewModel 中視圖的 Model。
View 層: 作為視圖模板存在 ,在 MVVM ⾥,整個 View 是⼀個動態模板。 除了定義結構、布局外,它展示的是 ViewModel 層的數據和狀態 。View 層不負責處理狀態,View 層做的是 數據綁定的聲明、 指令的聲明、 事件綁定的聲 明。
ViewModel 層: 把 View 需要的層數據暴露,并對 View 層的 數據綁定聲明、 指令聲明、 事件綁定聲明 負責,也就是處 理 View 層的具體業務邏輯。 ViewModel 底層會做好綁定屬性的監聽。當 ViewModel 中數據變化,View 層會得到更新;⽽當 View 中聲明了數據的雙向綁定(通常是表單元素),框架也會監聽 View 層(表單)值的變化。⼀旦值變 化,View 層綁定的 ViewModel 中的數據也會得到⾃動更新。
優點:
Model變化和修改,⼀個ViewModel可以綁定不同的"View"上,當View變化的時候Model不可以不變,當Model變化 的時候View也可以不變。你可以把⼀些視圖邏輯放在⼀個ViewModel⾥⾯,讓很多view重⽤這段視圖邏輯
缺點:
Vue 實例有⼀個完整的⽣命周期,也就是從開始創建、初始化數據、編譯模版、掛載Dom -> 渲染、更新 -> 渲染、卸載 等⼀系列過程
官⽅實例的異步請求是在mounted⽣命周期中調⽤的,⽽實際上也可以在created⽣命周期中調⽤。
買粉絲s://juejin.im/post/5d267dcdf265da1b957081a3
買粉絲puted用于計算屬性,只有它依賴的值改變才會觸發,且這個值有緩存
watch用于監聽一個屬性的變化,屬性變化就會觸發
買粉絲puted:
⼩結:
簡單版:利⽤ Object.defineProperty 劫持對象的訪問器,在屬性值發⽣變化時我們可以獲取變化,然后根據變化進⾏后續響應,在 vue3.0中通過Proxy代理對象進⾏類似的操作。
補充
vue的雙向綁定是通過數據劫持和發布者-訂閱者模式實現的,數據劫持又是通過
Object.defineProperty()實現的
Proxy的優勢如下:
Proxy可以直接監聽對象⽽⾮屬性
Proxy可以直接監聽數組的變化
Proxy有多達13種攔截⽅法,不限于apply、ownKeys、deleteProperty、has等等是 Object.defineProperty 不具備的
Proxy返回的是⼀個新對象,我們可以只操作新的對象達到⽬的,⽽
Object.defineProperty 只能遍歷對象屬性直接修 改Proxy作為新標準將受到瀏覽器⼚商重點持續的性能優化,也就是傳說中的新標準的性能紅利
Object.defineProperty的優勢如下: 兼容性好,⽀持IE9
v-if 用于條件渲染
v-show 用于條件渲染,兩者的區別請參考下一個問題
v-for 用于列表渲染
v-on 監聽事件
v-bind 動態綁定
v-買粉絲 渲染買粉絲元素
v-model 數據雙向綁定
v-if 是惰性的,只有條件為真時才會切換,為假時什么也不做。確保切換過程中的事件監聽器和子組件適當的被銷毀和重建,適用于運行條件很少改變的場景。v-show 不管條件是否為真,總是會被渲染,適用于頻繁切換的場景
v-for優先級高于v-if,放于同級可能會重復渲染兩次v-if,建議把v-for放于v-if所在的外層元素
原理:eventloop事件循環
在下次 DOM 更新循環結束之后執行延遲回調。在修改數據之后立即使用這個方法,獲取更新后的 DOM。
key 主要用在 Vue 的虛擬 DOM 算法,在新舊 nodes 對比時辨識 VNodes。不指定key時,Vue 會使用一種最大限度減少動態元素并且盡可能的嘗試
就地修改/復用相同類型元素的算法。而使用 key 時,它會基于 key 的變化重新排列元素順序,并且會移除 key 不存在的元素。
有相同父元素的子元素必須有獨特的 key。重復的 key 會造成渲染錯誤。
1.beforeCreate
初始化界面前
2.created
初始化界面后,拿到data,props,methods、買粉絲puted和watch
3.beforeMount
渲染dom前
4.mounted
渲染dom后,拿到$el
5.beforeUpdate
更新前
6.updated
更新后,拿到更新后的dom
7.beforeDestroy
卸載組件前
8.destroyed
卸載組件后
9.activated
被 keep-alive 緩存的組件激活時調用
10.deactivated
被 keep-alive 緩存的組件停用時調用
虛擬dom是對真實dom的一種映射,新舊Vnode比較同層級的節點,然后根據兩者的差異只更新有差異的部分,生成新的視圖,而不是對樹進行逐層搜素遍歷,因此時間復雜度是O(n)。虛擬dom可以減少頁面的回流和重繪,提升性能
Vue 面試中常問知識點整理
生命周期:Vue實例從開始創建、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程,我們稱這是Vue的生命周期,各個階段有相對應的事件鉤子。
beforeCreate(創建前),在數據觀測和初始化事件還未開始
created(創建后),完成數據觀測,屬性和方法的運算,初始化事件, $el 屬性還沒有顯示出來
beforeMount(載入前),在掛載開始之前被調用,相關的render函數首次被調用。實例已完成以下的配置:編譯模板,把data里面的數據和模板生成買粉絲。注意此時還沒有掛載買粉絲到頁面上。
mounted(載入后),在 el 被新創建的 vm.$el 替換,并掛載到實例上去之后調用。實例已完成以下的配置:用上面編譯好的買粉絲內容替換 el 屬性指向的DOM對象。完成模板中的買粉絲渲染到買粉絲頁面中。此過程中進行ajax交互。
beforeUpdate(更新前),在數據更新之前調用,發生在虛擬DOM重新渲染和打補丁之前。可以在該鉤子中進一步地更改狀態,不會觸發附加的重渲染過程。
updated(更新后),在由于數據更改導致的虛擬DOM重新渲染和打補丁之后調用。調用時,組件DOM已經更新,所以可以執行依賴于DOM的操作。然而在大多數情況下,應該避免在此期間更改狀態,因為這可能會導致更新無限循環。該鉤子在服務器端渲染期間不被調用。
beforeDestroy(銷毀前),在實例銷毀之前調用。實例仍然完全可用。
destroyed(銷毀后),在實例銷毀之后調用。調用后,所有的事件監聽器會被移除,所有的子實例也會被銷毀。該鉤子在服務器端渲染期間不被調用。
注意:
created 階段的ajax請求與 mounted 請求的區別:前者頁面視圖未出現,如果請求信息過多,頁面會長時間處于白屏狀態。
mounted 不會承諾所有的子組件也都一起被掛載。如果你希望等到整個視圖都渲染完畢,可以用 vm.$nextTick 。
初始化組件時,僅執行了 beforeCreate/Created/beforeMount/mounted 四個鉤子函數
當改變 data 中定義的變量(響應式變量)時,會執行 beforeUpdate/updated 鉤子函數
當切換組件(當前組件未緩存)時,會執行 beforeDestory/destroyed 鉤子函數
初始化和銷毀時的生命鉤子函數均只會執行一次, beforeUpdate/updated 可多次執行
僅當子組件完成掛載后,父組件才會掛載
當子組件完成掛載后,父組件會主動執行一次beforeUpdate/updated鉤子函數(僅首次)
父子組件在data變化中是分別監控的,但是在更新props中的數據是關聯的
銷毀父組件時,先將子組件銷毀后才會銷毀父組件
組件的初始化(mounted之前)分開進行,掛
很赞哦!(28297)
相关文章
- 01 對外貿易出口退稅流程(出口退稅流程具體詳細是什么?)
- 03 對外經濟貿易大學有音樂專業嗎(體育學院有什么專業)
- 01 對外貿易依存度越大越好嗎(一個國家的對外貿易依存度是越高越好,還是越低越好?)
- 03 對外經濟貿易大學畢業就業方向(國際商務的就業方向有哪些?)
- 01 對外貿易大學是211還是985(對外經濟貿易大學是985還是211)
- 01 對外貿易和中央財經哪個好(對外經濟貿易大學和中央財經大學哪個好)
- 01 對外貿易依存度算法(對外貿易依存度的計算公式)
- 01 對外貿易包括哪些內容(對外貿易政策主要包括哪幾個部分)
- 01 對外貿易大學有哪些(對外貿易大學有哪些)
- 03 對外經濟貿易大學校園網自助(河北經貿大學經濟管理學院和天津商業大學寶德學院哪個好)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片
职业:程序员,设计师
现居:黑龙江省绥化海伦市
工作室:小组
Email:[email protected]