您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
01 vue的發布者和訂閱者是什么(Vue 面試中常問知識點整理)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-07-27 13:31:15【】8人已围观
简介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之前)分開進行,掛
很赞哦!(3)
相关文章
- 03 youtuber是什么文件怎么寫(跨境獨立站怎么引流?獨立站推廣方式盤點!)
- 01 快手短視頻沒有播放量可以直播嗎(快手怎樣直播 快手開直播步驟視頻 快手直播要求有什么條件)
- 01 快手播放量里程碑在哪里看(快手怎么查看自己的里程碑)
- 03 youtube 買粉絲s of music 買粉絲s on(mp5的英文介紹)
- 01 快手每個作品播放量都是二三千(為什么我快手2w多粉絲,發的作品播放量還比不上一個三千多粉絲的人,這是怎么回事啊,我的作品也不差啊)
- 01 快手的櫥窗帶貨怎么操作(快手帶貨怎么操作)
- 01 快手有圖文帶貨功能嗎(快手圖文帶貨什么時候開始的)
- 01 快手短視頻播放量怎么看(快手更新后怎么看播放量)
- 03 youtube 買粉絲s downloader 買粉絲 download mp4 hd full(C#服務端,Android客戶端 開發IM,服務端怎么弄,有沒有開源的框架)
- 01 快手第一個千萬網紅是誰(網紅排行榜前十名大全(全國快手網紅前十名))
热门文章
站长推荐
03 youtube下載器 apk安裝程序下載(手機上有哪些可以免費上傳視頻的軟件)
01 快手短視頻怎么提高播放量(快手播放量多了有什么好處)
03 youtube website 買粉絲s music 買粉絲 music downloads(幫忙翻譯一段IPHONE廣告)
01 快手播放量軟件下載(快手播放量在哪里看)
03 youtuber是什么文件類型一般分為兩(sony攝影機哪個型號好)
01 快手短視頻帶貨數據在哪看(哪里可以看到快手優質帶貨短視頻數據?)
03 youtuber是什么意思呢英語(tiktoker是什么工作)
03 youtube website 買粉絲s 買粉絲 music(根據短文內容,從短文后的選項中選出能填入空白處的最佳選項。選項中有兩項為多余選項。 People around t)