最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue數(shù)據(jù)監(jiān)聽解析Object.defineProperty與Proxy區(qū)別

 更新時(shí)間:2023年03月13日 09:13:54   作者:可畏  
這篇文章主要為大家介紹了vue數(shù)據(jù)監(jiān)聽解析Object.defineProperty Proxy源碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

總能深深感覺到自己能力有限,寫這篇文章的目的純粹是因?yàn)榘l(fā)現(xiàn)在實(shí)際工作中,和一些小伙伴交流時(shí)發(fā)現(xiàn),雖然有些小伙伴大概知道 vue2vue3 的區(qū)別,但并沒有去進(jìn)一步思考一些深一點(diǎn)的東西。盡管能力有限,但想著自己在起步時(shí)候的艱難,就想著分享一下自己的一些看法,雖然不一定有多深入,但能引起大家的一些思考也是好的。

Object.defineProperty 與 Proxy 的區(qū)別

其實(shí)在 api 的命名上就能看出端倪,Object.defineProperty 顧名思義,是與對象和屬性有關(guān)的。 vue2 就是利用 definePropertysetget 方法去監(jiān)聽對象屬性變化的。 而 Proxy 是直接去監(jiān)聽一個(gè)對象的。

注意:他們在這里的區(qū)別就是 Object.defineProperty 監(jiān)聽的是對象的屬性,而 Proxy 監(jiān)聽的是這個(gè)對象本身

在使用上的差異

如上所述,Object.defineProperty 監(jiān)聽的是對象的屬性, 但是監(jiān)聽屬性只能遍歷監(jiān)聽對象已有的屬性,對于可能新增的屬性,vue2 是沒有辦法監(jiān)聽的,頁面自然也就不會更新。 所以為了解決這個(gè)問題 vue2 提供了 set 方法,當(dāng)新增屬性時(shí),可以通過 set 方法為新增的屬性添加監(jiān)聽器。
Proxy 帶來的問題就是由于監(jiān)聽的是一個(gè)對象,自然能監(jiān)聽對象的所有屬性變化,那么也就不再需要 set 這個(gè)方法了。

但是由于監(jiān)聽的是對象,所以沒法處理基礎(chǔ)類型。當(dāng)我們使用 ref(false) 去創(chuàng)建一個(gè)基本類型的響應(yīng)式變量時(shí),本質(zhì)相當(dāng)于 reactive({value: false})。于是 Vue3 有了一個(gè)很奇怪的現(xiàn)象, 明明想用 ref 方法監(jiān)聽一個(gè)基礎(chǔ)類型,卻需要通過 .value 才能獲取到具體值。

總結(jié)與思考

總的來說,Proxy 雖然解決了 set 的坑,但是又埋下了 ref 的坑,那么 Proxy 值得使用嗎?

我的理解是值得的。原因就是同樣監(jiān)聽一個(gè)對象,之前要為每個(gè)屬性設(shè)置監(jiān)聽器,現(xiàn)在不需要了,性能和屬性管理成本都能直線下降。

以上就是 vue數(shù)據(jù)監(jiān)聽解析Object.defineProperty與Proxy區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于 vue數(shù)據(jù)監(jiān)聽的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

通海县| 苏尼特左旗| 丰县| 龙游县| 岳阳市| 株洲县| 三亚市| 德江县| 炉霍县| 安康市| 东丰县| 崇文区| 兰州市| 贡觉县| 武陟县| 闽清县| 临安市| 图木舒克市| 时尚| 洛扎县| 民权县| 崇仁县| 沅江市| 清苑县| 商洛市| 饶河县| 海伦市| 八宿县| 大丰市| 渭源县| 常州市| 嵩明县| 神池县| 肇庆市| 全椒县| 遵义县| 河东区| 沂南县| 简阳市| 吉林市| 莱州市|