日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

面試官:Vue3中什么是Reactive的懶響應(yīng)性?

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

Hello,大家好,我是 Sunday。rCv28資訊網(wǎng)——每日最新資訊28at.com

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

01:Reactive 的實(shí)現(xiàn)原理

Reactive 是基于 Proxy 進(jìn)行實(shí)現(xiàn)的,這個(gè)概念很多同學(xué)都是知道的。我們可以通過 vue 的源碼來看下這個(gè)實(shí)現(xiàn):rCv28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片rCv28資訊網(wǎng)——每日最新資訊28at.com

代碼比較復(fù)雜,大家可以只看我紅框中的內(nèi)容rCv28資訊網(wǎng)——每日最新資訊28at.com

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

我們可以通過如下偽代碼表示:rCv28資訊網(wǎng)——每日最新資訊28at.com

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

在這種情況下,{name: '張三'} 就會(huì)被包裝成一個(gè) 響應(yīng)式對(duì)象,proxy 通過監(jiān)聽它的 getter、setter 行為來觸發(fā)響應(yīng)性。rCv28資訊網(wǎng)——每日最新資訊28at.com

02:Proxy 的問題

Proxy 可以代理對(duì)象,這個(gè)是沒有問題的。但是:Proxy 只能代理一層對(duì)象,而不能代理多層。rCv28資訊網(wǎng)——每日最新資訊28at.com

什么意思呢?假如當(dāng) 代理對(duì)象 具備層級(jí)嵌套的時(shí)候,proxy 是不可以代理子層級(jí)的。我們可以通過以下代碼來進(jìn)行測(cè)試:rCv28資訊網(wǎng)——每日最新資訊28at.com

const target = {    name: '張三',    child: {      name: '小張三'    }  }  const p = new Proxy(target, {    set(target, property, value, receiver) {      console.log('觸發(fā)了 set');      target[property] = value      return true    },    get(target, property, receiver) {      console.log('觸發(fā)了 get');      return target[property]    }  })  p.name = '李四'  // 打?。河|發(fā)了 set  p.child.name = '小李四' // 打?。河|發(fā)了 get。注意:并沒有觸發(fā) child 的 set

在上述代碼中,我們利用 proxy 代理了 target 對(duì)象。注意:此時(shí)的 target 是存在嵌套的復(fù)雜數(shù)據(jù)類型 child。rCv28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)我們執(zhí)行 p.name = '李四' 時(shí),觸發(fā) set 行為,這是一個(gè)很正常的邏輯。但是,當(dāng)我們執(zhí)行 p.child.name = '小李四' 時(shí),我們會(huì)發(fā)現(xiàn) 僅觸發(fā)了一個(gè) get(p.child),而沒有觸發(fā) set 行為。rCv28資訊網(wǎng)——每日最新資訊28at.com

這就證明:對(duì)于 Proxy 而言, 它只能代理 一層 的復(fù)雜數(shù)據(jù)類型,而不可以代理多層。rCv28資訊網(wǎng)——每日最新資訊28at.com

但是,在 Vue 中 多層的 Reactive 對(duì)象卻可以實(shí)現(xiàn)響應(yīng)性,那么這是如何做到的呢? 具體的方式就是 Reactive的懶響應(yīng)性。rCv28資訊網(wǎng)——每日最新資訊28at.com

03:Reactive的懶響應(yīng)性

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

圖片圖片rCv28資訊網(wǎng)——每日最新資訊28at.com

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

而根據(jù) 01:Reactive 的實(shí)現(xiàn)原理 我們知道 reactive 方法本質(zhì)上就是生成了一個(gè) Proxy 實(shí)例。所以說,這里的代碼核心其實(shí)就是 一旦獲取到的屬性是對(duì)象,則會(huì)為該對(duì)象再次執(zhí)行 reactive 方法rCv28資訊網(wǎng)——每日最新資訊28at.com

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

圖片圖片rCv28資訊網(wǎng)——每日最新資訊28at.com

即:再次通過 Proxy 完成代理,并返回rCv28資訊網(wǎng)——每日最新資訊28at.com

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

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

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

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

下一篇: 聊聊Rust里面的數(shù)據(jù)類型

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 紅魔電競(jìng)平板評(píng)測(cè):大屏幕硬實(shí)力

    前言:三年的疫情因?yàn)橐暇W(wǎng)課的原因激活了平板市場(chǎng),如今網(wǎng)課的時(shí)代已經(jīng)過去,大家的生活都恢復(fù)到了正軌,這也就意味著,真正考驗(yàn)平板電腦生存的環(huán)境來了。也就是面對(duì)著這種殘酷的
  • 六大權(quán)益!華為8月服務(wù)日開啟:手機(jī)免費(fèi)貼膜、維修免人工費(fèi)

    8月5日消息,一年一度的華為開發(fā)者大會(huì)2023(Together)日前在松山湖拉開帷幕,與此同時(shí),華為8月服務(wù)日也式開啟,到店可享六大專屬權(quán)益。華為用戶可在華為商城Ap
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團(tuán)隊(duì)做了容器化,但是帶來的問題是服務(wù)配置文件很麻煩,然后大家在群里進(jìn)行了“親切友好”的溝通圖片圖片圖片圖片對(duì)比就對(duì)比,簡(jiǎn)單對(duì)比下獨(dú)立配置中心和k8s作為配
  • 不容錯(cuò)過的MSBuild技巧,必備用法詳解和實(shí)踐指南

    一、MSBuild簡(jiǎn)介MSBuild是一種基于XML的構(gòu)建引擎,用于在.NET Framework和.NET Core應(yīng)用程序中自動(dòng)化構(gòu)建過程。它是Visual Studio的構(gòu)建引擎,可在命令行或其他構(gòu)建工具中使用
  • 一個(gè)注解實(shí)現(xiàn)接口冪等,這樣才優(yōu)雅!

    場(chǎng)景碼猿慢病云管理系統(tǒng)中其實(shí)高并發(fā)的場(chǎng)景不是很多,沒有必要每個(gè)接口都去考慮并發(fā)高的場(chǎng)景,比如添加住院患者的這個(gè)接口,具體的業(yè)務(wù)代碼就不貼了,業(yè)務(wù)偽代碼如下:圖片上述代碼有
  • 2023年,我眼中的字節(jié)跳動(dòng)

    此時(shí)此刻(2023年7月),字節(jié)跳動(dòng)從未上市,也從未公布過任何官方的上市計(jì)劃;但是這并不妨礙它成為中國最受關(guān)注的互聯(lián)網(wǎng)公司之一。從2016-17年的抖音強(qiáng)勢(shì)崛起,到2018年的“頭騰
  • 猿輔導(dǎo)與新東方的兩種“歸途”

    作者|卓心月 出品|零態(tài)LT(ID:LingTai_LT)如何成為一家偉大企業(yè)?答案一定是對(duì)“勢(shì)”的把握,這其中最關(guān)鍵的當(dāng)屬對(duì)企業(yè)戰(zhàn)略的制定,且能夠站在未來看現(xiàn)在,即使這其中的
  • 簽約井川里予、何丹彤,單視頻點(diǎn)贊近千萬,MCN黑馬永恒文??焖籴绕?!

    來源:視聽觀察永恒文希傳媒作為一家MCN公司,說起它的名字來,可能大家會(huì)覺得有點(diǎn)兒陌生,但是說出來下面一串的名字之后,或許大家就會(huì)感到震驚,原來這么多網(wǎng)紅,都簽約這家公司了。根
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報(bào)道 從三強(qiáng)爭(zhēng)霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺(tái)積電、三星,還是誓言重回先進(jìn)制程領(lǐng)先地位的英特爾,甚至初成立不久的新
Top 主站蜘蛛池模板: 南部县| 沙坪坝区| 宝鸡市| 白水县| 尚志市| 濮阳市| 林甸县| 沂南县| 集安市| 岳普湖县| 竹北市| 烟台市| 泗阳县| 昌吉市| 莱芜市| 潢川县| 西城区| 南投县| 汉中市| 曲麻莱县| 余干县| 洛隆县| 台北市| 赤城县| 崇仁县| 大城县| 阿巴嘎旗| 赞皇县| 五峰| 额敏县| 迁安市| 曲麻莱县| 临沂市| 瑞安市| 高雄市| 漳州市| 镇赉县| 景洪市| 穆棱市| 岗巴县| 广灵县|