AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-04-11 17:31:00 179觀看
導讀Hello,大家好,我是 Sunday。Reactive 的懶響應性 可能很多同學之前沒有聽說過這個概念。最近一個同學在面試中就被問到了這個問題。所以說,咱們今天就借助這篇文章來看下:在vue3中,什么是 Reactive 的懶響應性?01:Reactive

Hello,大家好,我是 Sunday。fTb28資訊網——每日最新資訊28at.com

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

01:Reactive 的實現原理

Reactive 是基于 Proxy 進行實現的,這個概念很多同學都是知道的。我們可以通過 vue 的源碼來看下這個實現:fTb28資訊網——每日最新資訊28at.com

圖片圖片fTb28資訊網——每日最新資訊28at.com

代碼比較復雜,大家可以只看我紅框中的內容fTb28資訊網——每日最新資訊28at.com

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

我們可以通過如下偽代碼表示:fTb28資訊網——每日最新資訊28at.com

function reactive (target) {  return new Proxy(target, {....})}const test = reactive({name: '張三'})

在這種情況下,{name: '張三'} 就會被包裝成一個 響應式對象,proxy 通過監聽它的 getter、setter 行為來觸發響應性。fTb28資訊網——每日最新資訊28at.com

02:Proxy 的問題

Proxy 可以代理對象,這個是沒有問題的。但是:Proxy 只能代理一層對象,而不能代理多層。fTb28資訊網——每日最新資訊28at.com

什么意思呢?假如當 代理對象 具備層級嵌套的時候,proxy 是不可以代理子層級的。我們可以通過以下代碼來進行測試:fTb28資訊網——每日最新資訊28at.com

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。fTb28資訊網——每日最新資訊28at.com

當我們執行 p.name = '李四' 時,觸發 set 行為,這是一個很正常的邏輯。但是,當我們執行 p.child.name = '小李四' 時,我們會發現 僅觸發了一個 get(p.child),而沒有觸發 set 行為。fTb28資訊網——每日最新資訊28at.com

這就證明:對于 Proxy 而言, 它只能代理 一層 的復雜數據類型,而不可以代理多層。fTb28資訊網——每日最新資訊28at.com

但是,在 Vue 中 多層的 Reactive 對象卻可以實現響應性,那么這是如何做到的呢? 具體的方式就是 Reactive的懶響應性。fTb28資訊網——每日最新資訊28at.com

03:Reactive的懶響應性

我們觀察 Vue 的源碼,在源碼監聽 proxy getter 行為的地方,存在這樣一段代碼(我把代碼稍微做了一些調整,讓大家看的可以更加清晰):fTb28資訊網——每日最新資訊28at.com

圖片圖片fTb28資訊網——每日最新資訊28at.com

核心的代碼就在紅框的位置,其中的 res 大家可以理解為 target[property] 。fTb28資訊網——每日最新資訊28at.com

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

如果用偽代碼表示,就是下面這樣:fTb28資訊網——每日最新資訊28at.com

圖片圖片fTb28資訊網——每日最新資訊28at.com

即:再次通過 Proxy 完成代理,并返回fTb28資訊網——每日最新資訊28at.com

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

本文鏈接:http://www.tebozhan.com/showinfo-26-82949-0.html面試官:Vue3中什么是Reactive的懶響應性?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Rust語言入門:Hello World示例

下一篇: 聊聊Rust里面的數據類型

標簽:
  • 熱門焦點
  • 盧偉冰長文解析K60至尊版 對Redmi有著里程碑式的意義

    在今天的Redmi后性能時代戰略發布會結束之后,Redmi總經理盧偉冰又帶來了一篇長文,詳解了為什么 Redmi 要開啟后性能時代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁“充值中心”入口上線了本機生活界面。壹覽商業發現,該界面目前主要
  • 三星電子Q2營收60萬億韓元 存儲業務營收同比仍下滑超過50%

    7月27日消息,據外媒報道,從三星電子所發布的財報來看,他們主要利潤來源的存儲芯片業務在今年二季度仍不樂觀,營收同比仍在大幅下滑,所在的設備解決方案
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主“七王”在群里介紹一些刷單賺
Top