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

VueJS設(shè)計與實現(xiàn)之淺響應(yīng)與深響應(yīng)詳解

 更新時間:2022年08月11日 11:25:12   作者:冒菜師  
這篇文章主要為大家介紹了VueJS設(shè)計與實現(xiàn)之淺響應(yīng)與深響應(yīng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

前文中講完了如何響應(yīng)Object,并處理了一些響應(yīng)中的問題,但是我們目前,包括之前實現(xiàn)的響應(yīng)式,其實只是淺響應(yīng)。

直接上代碼

const obj = {a:{b:1}}
const reactive = (obj)=> new Proxy(obj,{
 get(target,key,receiver){
   /*省略其他邏輯*/
  return Reflect.get(target,key,receiver)
 },
  /*省略其他攔截*/
})
const data = reactive(obj)

問題就出現(xiàn)在Reflect.get(target, key, receiver)這句代碼里,我們現(xiàn)在嘗試一下獲取data.a,應(yīng)該返回的是{b:1},不是Proxy,自然不會響應(yīng)什么。

所以對于這種嵌套對象,我們自然要去遞歸的把對象轉(zhuǎn)換為響應(yīng)式對象。

const reactive = (obj)=> new Proxy(obj,{
 get(target,key,receiver){
   /*省略其他邏輯*/
  const res =  Reflect.get(target,key,receiver)
  if(res && typeof res === 'object'){
      return reactive(res)
  }
  return res
 },
 /*省略其他攔截*/
})

這樣,當(dāng)內(nèi)部是嵌套對象的時候,我們遞歸把嵌套對象轉(zhuǎn)換為響應(yīng)式對象,這樣再按之前的追蹤依賴,觸發(fā)響應(yīng)去處理就好了。

當(dāng)時,深響應(yīng)和淺響應(yīng)都是有各自的使用條件的。比如我在完成第一個vue3.2項目有感中寫過,我就比較喜歡用shallowRef,這就是一種淺響應(yīng)。

好了,話題收回來。我們之前封裝的那個reactive已經(jīng)變成一個深響應(yīng)了,我們現(xiàn)在就在封裝一層,去區(qū)分淺響應(yīng)和深響應(yīng)。我們通過一個新的參數(shù)deepify去判斷淺響應(yīng)和深響應(yīng),然后深響應(yīng)的時候才去遞歸。

之所以再封裝了一層,是因為我們后續(xù)還要繼續(xù)擴(kuò)展這個函數(shù)

const createReactive = (obj,deepify = true)=>new Proxy(obj,{
 get(target,key,receiver){
   /*省略其他邏輯*/
  const res =  Reflect.get(target,key,receiver)
  //深響應(yīng)式遞歸
  if(deepify && res && typeof res === 'object'){
       return reactive(res)
  }
  return res
 },
 /*省略其他攔截*/
})

這樣子封裝之后,我們就有了2個函數(shù)reactive,shallowReactive

const reactive = (obj)=>createReactive(obj)
const shallowReactive = (obj)=>createReactive(obj,false)

大家使用的時候,其實需要看情況去選擇,淺響應(yīng)其實有時候比深響應(yīng)更方便。就比如我之前在那篇文章中舉得例子一樣。

以上就是VueJS設(shè)計與實現(xiàn)之淺響應(yīng)與深響應(yīng)詳解的詳細(xì)內(nèi)容,更多關(guān)于VueJS淺響應(yīng)深響應(yīng)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

方城县| 福贡县| 松溪县| 茂名市| 桦川县| 容城县| 桑植县| 河间市| 泉州市| 焉耆| 商城县| 卢龙县| 平昌县| 库尔勒市| 柳河县| 湘阴县| 高要市| 遂宁市| 昌都县| 丰县| 蚌埠市| 惠水县| 喜德县| 金塔县| 神池县| 乌拉特中旗| 龙海市| 文成县| 江华| 凤城市| 麦盖提县| 昌图县| 桂平市| 龙泉市| 运城市| 隆子县| 西丰县| 阆中市| 徐水县| 廉江市| 英吉沙县|