成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:Vue3中什么是Reactive的懶響應性?

開發 前端
所謂的 Reactive的懶響應性 指的就是:Reactive 最初只會為復雜數據類型執行第一層的響應性。如果存在多層的復雜數據類型嵌套時,則會在使用到(getter 行為)該子集時,才會再次為該子集包裝 proxy(執行 reactive 方法)。

Hello,大家好,我是 Sunday。

Reactive 的懶響應性 可能很多同學之前沒有聽說過這個概念。最近一個同學在面試中就被問到了這個問題。所以說,咱們今天就借助這篇文章來看下:在vue3中,什么是 Reactive 的懶響應性?

01:Reactive 的實現原理

Reactive 是基于 Proxy 進行實現的,這個概念很多同學都是知道的。我們可以通過 vue 的源碼來看下這個實現:

圖片圖片

代碼比較復雜,大家可以只看我紅框中的內容

通過上圖紅框中的代碼,我們可以很清晰的看到在 Reactive 里面,Vue 最終通過 new Proxy 的方式生成了一個 Proxy 的實例對象。 這個 Proxy 的實例就是 reactive() 方法調用時的返回值。

我們可以通過如下偽代碼表示:

function reactive (target) {
  return new Proxy(target, {....})
}

const test = reactive({name: '張三'})

在這種情況下,{name: '張三'} 就會被包裝成一個 響應式對象,proxy 通過監聽它的 getter、setter 行為來觸發響應性。

02:Proxy 的問題

Proxy 可以代理對象,這個是沒有問題的。但是:Proxy 只能代理一層對象,而不能代理多層。

什么意思呢?假如當 代理對象 具備層級嵌套的時候,proxy 是不可以代理子層級的。我們可以通過以下代碼來進行測試:

const target = {
    name: '張三',
    child: {
      name: '小張三'
    }
  }

  const p = new Proxy(target, {
    set(target, property, value, receiver) {
      console.log('觸發了 set');
      target[property] = value
      return true
    },
    get(target, property, receiver) {
      console.log('觸發了 get');
      return target[property]
    }
  })

  p.name = '李四'  // 打印:觸發了 set
  p.child.name = '小李四' // 打印:觸發了 get。注意:并沒有觸發 child 的 set

在上述代碼中,我們利用 proxy 代理了 target 對象。注意:此時的 target 是存在嵌套的復雜數據類型 child。

當我們執行 p.name = '李四' 時,觸發 set 行為,這是一個很正常的邏輯。但是,當我們執行 p.child.name = '小李四' 時,我們會發現 僅觸發了一個 get(p.child),而沒有觸發 set 行為。

這就證明:對于 Proxy 而言, 它只能代理 一層 的復雜數據類型,而不可以代理多層。

但是,在 Vue 中 多層的 Reactive 對象卻可以實現響應性,那么這是如何做到的呢? 具體的方式就是 Reactive的懶響應性。

03:Reactive的懶響應性

我們觀察 Vue 的源碼,在源碼監聽 proxy getter 行為的地方,存在這樣一段代碼(我把代碼稍微做了一些調整,讓大家看的可以更加清晰):

圖片圖片

核心的代碼就在紅框的位置,其中的 res 大家可以理解為 target[property] 。

而根據 01:Reactive 的實現原理 我們知道 reactive 方法本質上就是生成了一個 Proxy 實例。所以說,這里的代碼核心其實就是 一旦獲取到的屬性是對象,則會為該對象再次執行 reactive 方法

如果用偽代碼表示,就是下面這樣:

圖片圖片

即:再次通過 Proxy 完成代理,并返回

所以說,所謂的 Reactive的懶響應性 指的就是:Reactive 最初只會為復雜數據類型執行第一層的響應性。如果存在多層的復雜數據類型嵌套時,則會在使用到(getter 行為)該子集時,才會再次為該子集包裝 proxy(執行 reactive 方法)

責任編輯:武曉燕 來源: 程序員Sunday
相關推薦

2022-06-29 16:59:21

Vue3Vue2面試

2021-09-07 10:44:33

Java 注解開發

2022-12-06 08:39:27

Vue3Reactive

2021-02-19 10:02:57

HTTPSJava安全

2024-02-22 15:36:23

Java內存模型線程

2021-12-08 06:53:29

面試動態代理

2022-09-29 07:30:57

數據庫索引字段

2024-12-03 10:40:51

Vue3injectprovide

2023-12-06 09:10:28

JWT微服務

2024-03-13 07:53:57

弱引用線程工具

2021-12-02 05:50:35

Vue3 插件Vue應用

2021-04-22 07:49:51

Vue3Vue2.xVue3.x

2024-10-15 10:00:06

2021-05-12 08:20:53

開發

2021-07-06 07:27:45

React元素屬性

2024-11-06 12:59:42

多線程銷毀線程切換

2021-04-19 18:56:58

大數字符串運算

2024-04-15 00:01:00

STWJava垃圾

2023-09-01 15:27:31

2023-12-20 14:35:37

Java虛擬線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产乱码精品一品二品 | 久久久99精品免费观看 | 成人国产一区二区三区精品麻豆 | 日本高清视频在线播放 | 国产精品美女久久久久久久久久久 | 国产精品一区二区视频 | 欧美激情网站 | 亚洲视频 欧美视频 | 久久久久久国产 | 国产精品久久久久久久久久久久久 | 国产精品久久国产精品99 | 91中文字幕在线观看 | 91av在线免费播放 | 午夜黄色| 免费99精品国产自在在线 | 久久久久久久久久久久久久av | 网站一区二区三区 | 日本一道本 | 观看av| 欧美福利 | 成人精品 | 国产1区2区在线观看 | 中文一区 | 久久久男人的天堂 | 中文字幕一区二区三 | 国产精品综合网 | 国产色99| 亚洲精品aⅴ | 无码日韩精品一区二区免费 | 亚洲一区电影 | 久久99国产精品 | 国产a一区二区 | 日韩一级 | 在线播放亚洲 | 91精品国产91久久综合桃花 | 国产精品久久在线 | 亚洲精品福利视频 | 成人av网站在线观看 | 超碰人人做 | 日韩一区二区三区视频在线观看 | 久久久久久久久久久久久久av |