您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
06 js發布訂閱模式原理(買粉絲小程序中實現狀態管理)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-06-14 17:30:11【】3人已围观
简介t和get操作。handler.get()get獲取屬性比較簡單,我們先來看看這個,這里我們用一個方法創建getHanlder。這里推薦使用了Reflect.get而并非target[key]。可以發
handler.get()
get 獲取屬性比較簡單,我們先來看看這個,這里我們用一個方法創建 getHanlder 。
這里推薦使用了 Reflect.get 而并非 target[key] 。
可以發現, Vue3 是在取值的時候才去遞歸遍歷屬性的,而非 Vue2 中一開始就遞歸 data 給每個屬性添加 Watcher ,這也是 Vue3 性能提升之一。
handler.set()
同理 set 操作,我們也是用一個方法創建 setHandler 。
Reflect.set 會返回一個 Boolean 值,用于判斷屬性是否設置成功。
完事后將 handler 導出,然后在 reactive 中引入即可。
測試幾組對象貌似沒啥問題,其實是有一個坑,這個坑也跟數組有關。
如上例子,如果我們選擇代理數組,在 setHandler 中打印其 key 和 value 的話會得到 3 4 , length 4 這兩組值:
如果不作處理,那么會導致如果更新視圖的話,則會觸發兩次,這肯定是不允許的,因此,我們需要將區分新增和修改這兩種操作。
Vue3 中是通過判斷 target 是否存在該屬性來區分是新增還是修改操作,需要借助一個工具方法 —— hasOwnProperty 。
這里我們將上述的 createSetter 方法修改如下:
如此一來,我們調 push 方法的時候,就只會觸發一次更新了,非常巧妙的避免了無意義的更新操作。
effect.js
光上述構造響應式對象并不能完成響應式的操作,我們還需要一個非常重要的方法 effect ,它會在初始化執行的時候存儲跟其有關的數據依賴,當依賴數據發生變化的時候,則會再次觸發 effect 傳遞的函數。
其基本雛形如下,入參是一個函數,還有個可選參數 options 方便后面計算屬性等使用,暫時不考慮:
createReactiveEffect 就是為了將 fn 變成響應式函數,監控數據變化,執行 fn 函數,因此該函數是一個高階函數。
createReactiveEffect 將原來的 fn 轉變成一個 reactvieEffect , 并將當前的 effect 掛到全局的 activeEffect 上,目的是為了一會與當前所依賴的屬性做好對應關系。
我們必須要將依賴屬性構造成 { prop : [effect,effect] } 這種結構,才能保證依賴屬性變化的時候,依次去觸發與之相關的 effect ,因此,需要在 get 屬性的時候,做屬性的依賴收集,將屬性與 effect 關聯起來。
依賴收集 —— track
在獲取對象的屬性時,會觸發 getHandler ,再次做屬性的依賴收集,即 Vue2 中的發布訂閱。
在 setHandler 中獲取屬性的時候,做一次 track(target, key) 操作。
整個 track 的數據結構大概是這樣
目的就是將 target , key , effect 之間做好對應的關系映射。
打印 targetMap 的結構如下:
**觸發更新 —— trigger
**上述已經完成了依賴收集,剩下就是監控數據變化,觸發更新操作,即在 setHandler 中添加 trigger 觸發操作。
這樣一來,獲取數據的時候通過 track 進行依賴收集,更新數據的時候再通過 trigger 進行更新,就完成了整個數據的響應式操作。
再回頭看看我們先前提到的例子:
控制臺會依次打印 Hello ***** effect ***** 以及 World ***** effect ***** , 分別是首次渲染觸發跟更新數據重渲染觸發,至此功能實現!
整體來說, Vue3 相比于 Vue2 在很多方面都做了調整,數據的響應式只是冰山一角,但是可以看出尤大團隊非常巧妙的利用了 Proxy 的特點以及 es6 的數據結構和方法。另外, Composition API 的模式跟 React 在某些程度上有異曲同工之妙,這種設計模式讓我們在實際開發使用中更加的方法快捷,值得我們去學習,加油!
最后附上倉庫地址 github ,歡迎各位大佬批評斧正~
很赞哦!(55)
相关文章
- 01 方宇跨專業綜合實訓貿易公司要買廠房嗎(方宇跨專業綜合實訓制造企業怎么賺錢)
- 02 windows 7 youtube app下載(youtube是什么樣的軟件)
- 01 旅游雜志訂閱刊號(中國對外貿易的雜志期刊)
- 02 youtube 80s pop hits playlist(以下音樂流派,請音樂達人介紹和解讀??)
- 01 新編外貿英語口語教程第四版pdf(外貿英語口語接待客戶用語帶翻譯閱讀)
- 02 youtube 1萬播放量收益多少(B 站付費視頻使 up 主掉粉過萬,你能否接受視頻付費?)
- 02 youtube alternative rock 2021(Alternative Rock Alternative Pop New Rave 什么意思)
- 01 新疆疾控中心買粉絲買粉絲綁定程序是什么(健康山西買粉絲買粉絲一直顯示網絡異常)
- 02 you tube 買粉絲s + diy(看Youtube的主頁有一個詞叫做"Promoted Videos"...請問這個Promoted 是什么意思啊)
- 02 買粉絲.youtube.買粉絲 app download(有什么手機軟件可以做動畫)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片
职业:程序员,设计师
现居:西藏日喀则吉隆县
工作室:小组
Email:[email protected]
热门文章
站长推荐
02 vivo手機怎么下載facebook軟件(為什么手機下載的軟件打開閃退?)
02 youtube 60 買粉絲untry music(什么是蘇打綠)
01 方辦理保險的貿易術語有(FOB CIF CFR都是那方買保險)
02 買粉絲.youtube.買粉絲 news live(在美國,都上哪個網站看視頻或聽音樂,要免費的,就像咱這的優酷,土豆,有沒有像百度一樣的網站可以查)
02 why youtube not working on windows 10(史蒂夫.喬布斯05年在斯坦福大學畢業典禮上的演講稿。謝謝)
02 youtube 64 bit download(哪個軟件有相機視頻)
01 新疆對外貿易的優勢有哪些(新疆對外貿易現狀從哪些方面分析)
01 新聞怎么轉載到買粉絲(1點新聞怎么轉載買粉絲)