国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue響應(yīng)式數(shù)據(jù)的原理

這篇具有很好參考價(jià)值的文章主要介紹了Vue響應(yīng)式數(shù)據(jù)的原理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在 vue2 的響應(yīng)式中,存在著添加屬性、刪除屬性、以及通過下標(biāo)修改數(shù)組,但頁面不會(huì)自動(dòng)更新的問題。而這些問題在 vue3 中都得以解決。

vue3 采用了 proxy 代理,用于攔截對(duì)象中任意屬性的變化,包括:屬性的讀寫、屬性的添加、屬性的刪除、以及通過下標(biāo)修改數(shù)組,都可以自動(dòng)更新頁面。

proxy 代理:用于在目標(biāo)對(duì)象之前架設(shè)一層攔截,外界對(duì)該對(duì)象的訪問,都必須先通過這層攔截,因此可以對(duì)外界的訪問進(jìn)行過濾和改寫。

另外 vue3 還采用了 reflect 反射,用于對(duì)源對(duì)象的屬性進(jìn)行操作。

reflect 反射:是一個(gè) JS 的內(nèi)置對(duì)象,它提供了一系列的方法,這些方法和對(duì)象中的功能相對(duì)應(yīng)。經(jīng)常配合 proxy 使用。proxy 用于攔截,reflect 用于操作。

?Proxy 代理的使用【代理對(duì)象】:

// 假設(shè)這個(gè)是我們創(chuàng)建的 reactive 數(shù)據(jù)
const data = {
  name: "張三",
  age: 21
};

// 創(chuàng)建 proxy 代理 data 對(duì)象,添加到 vue 的實(shí)例對(duì)象中
// 語法:const vm = new Proxy(要代理的數(shù)據(jù), 配置對(duì)象)
const vm = new Proxy(data, {
  // 當(dāng)有人讀取 vm 的某個(gè)屬性時(shí)調(diào)用
  get(target, propName) {
	// target 就是被代理的這個(gè)對(duì)象,propName 就是當(dāng)前操作的屬性
    console.log(`有人讀取了vm身上的${propName}屬性`);
    return target[propName]; // 返回代理對(duì)象中的這個(gè)屬性
  },
  // 當(dāng)有人修改 vm 的某個(gè)屬性時(shí),或給 vm 添加某個(gè)屬性時(shí)調(diào)用
  set(target, propName, value) {
	// value 就是修改的值
    console.log(`有人修改了vm身上的${propName}屬性,我要去更新頁面了!`);
    return (target[index] = value); // 修改或添加這個(gè)屬性
  },
  // 當(dāng)有人刪除 vm 的某個(gè)屬性時(shí)調(diào)用
  deleteProperty(target, propName) {
    console.log(`有人刪除了vm身上的${propName}屬性,我要去更新頁面了!`);
    return delete target[propName]; // 刪除代理對(duì)象中的這個(gè)屬性
  },
});

:proxy 不僅能檢測到讀取屬性和修改屬性,還能檢測到添加屬性和刪除屬性。所以在 vue3 中添加或刪除一個(gè)對(duì)象中的屬性時(shí),頁面也會(huì)自動(dòng)更新。

Vue響應(yīng)式數(shù)據(jù)的原理,vue.js,javascript,前端

?注:讀取時(shí)觸發(fā) get 函數(shù)、修改或添加時(shí)觸發(fā) set 函數(shù)、刪除時(shí)觸發(fā) deleteProperty 函數(shù)。

?Proxy 代理的使用【代理數(shù)組】:

// 假設(shè)這個(gè)是我們創(chuàng)建的 reactive 數(shù)據(jù)
const arr = ["張三", "李四", "王五"];

// 創(chuàng)建 proxy 代理 arr 數(shù)組,添加到 vue 的實(shí)例對(duì)象中
// 語法:const app = new Proxy(要代理的數(shù)據(jù), 配置對(duì)象)
const app = new Proxy(arr, {
  // 當(dāng)有人讀取 app 的某個(gè)值時(shí)調(diào)用
  get(target, index) {
    // target 就是被代理的這個(gè)數(shù)組,index 就是當(dāng)前操作的屬性或下標(biāo)
    console.log(`有人讀取了app身上下標(biāo)${index}的值`);
    return target[index]; // 返回代理數(shù)組中的這個(gè)值
  },
  // 當(dāng)有人修改 app 的某個(gè)值時(shí),或給 app 添加一個(gè)值時(shí)調(diào)用
  set(target, index, value) {
    // value 就是修改的值
    console.log(`有人修改了app身上下標(biāo)${index}的值,我要去更新頁面了!`);
    return (target[index] = value); // 修改或添加代理數(shù)組中的這個(gè)值
  },
  // 當(dāng)有人刪除 app 的某個(gè)值時(shí)調(diào)用
  deleteProperty(target, index) {
    console.log(`有人刪除了app身上下標(biāo)${index}的值,我要去更新頁面了!`);
    return delete target[index]; // 刪除代理數(shù)組中的這個(gè)值
  },
});

:proxy 支持通過下標(biāo)操作數(shù)組,例如查看數(shù)據(jù)、修改數(shù)據(jù)、增加數(shù)據(jù)。所以在 vue3 中通過下標(biāo)修改數(shù)組時(shí),頁面也會(huì)自動(dòng)更新。

Vue響應(yīng)式數(shù)據(jù)的原理,vue.js,javascript,前端

?注:在使用 push 等方法的時(shí)候,length 屬性也會(huì)發(fā)生變化。所以 vue3 分別判斷了 push、pop、unshift、shift 等方法,用于區(qū)分?jǐn)r截的各種情況。

?Proxy 代理的使用【深層數(shù)據(jù)的問題】

const data = {
  name: "張三",
  age: 20,
  arr: ["a", "b", "c"],
  obj: { q: 1, w: 2 },
};

const app = new Proxy(data, {
  get(target, propName) {
    console.log(`有人讀取了app身上的${propName}屬性`);
    return target[propName];
  },
  set(target, propName, value) {
    console.log(`有人修改了app身上的${propName}屬性,我要去更新頁面了!`);
    return (target[propName] = value);
  },
  deleteProperty(target, propName) {
    console.log(`有人刪除了app身上的${propName}屬性,我要去更新頁面了!`);
    return delete target[propName];
  },
});

:proxy 代理深層數(shù)據(jù)的時(shí)候,只會(huì)觸發(fā) get 函數(shù),并不會(huì)觸發(fā) set 函數(shù)

Vue響應(yīng)式數(shù)據(jù)的原理,vue.js,javascript,前端

:proxy 只會(huì)攔截第一層數(shù)據(jù),所以 vue3 對(duì)深層數(shù)據(jù)進(jìn)行了循環(huán)遍歷,重新利用 proxy 代理了深層數(shù)據(jù)。

原創(chuàng)作者:吳小糖

創(chuàng)作時(shí)間:2023.8.12?文章來源地址http://www.zghlxwxcb.cn/news/detail-644021.html

到了這里,關(guān)于Vue響應(yīng)式數(shù)據(jù)的原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue響應(yīng)式數(shù)據(jù)的原理

    Vue響應(yīng)式數(shù)據(jù)的原理

    在 vue2 的響應(yīng)式中,存在著添加屬性、刪除屬性、以及通過下標(biāo)修改數(shù)組,但頁面不會(huì)自動(dòng)更新的問題。而這些問題在 vue3 中都得以解決。 vue3 采用了 proxy 代理,用于攔截對(duì)象中任意屬性的變化,包括:屬性的讀寫、屬性的添加、屬性的刪除、以及通過下標(biāo)修改數(shù)組,都可以

    2024年02月13日
    瀏覽(20)
  • Vue3 數(shù)據(jù)響應(yīng)式原理

    核心: 通過Proxy(代理): 攔截對(duì)data任意屬性的任意(13種)操作, 包括屬性值的讀寫, 屬性的添加, 屬性的刪除等… 通過 Reflect(反射): 動(dòng)態(tài)對(duì)被代理對(duì)象的相應(yīng)屬性進(jìn)行特定的操作 Vue3的響應(yīng)式比Vue2好在哪里? 效率更高了,Vue2中假設(shè)監(jiān)聽某個(gè)對(duì)象,該對(duì)象中有一萬個(gè)屬性,他要循

    2024年02月11日
    瀏覽(20)
  • Vue源碼學(xué)習(xí) - 數(shù)據(jù)響應(yīng)式原理

    Vue源碼學(xué)習(xí) - 數(shù)據(jù)響應(yīng)式原理

    Vue.Js的核心包括一套 “響應(yīng)式系統(tǒng)”。“響應(yīng)式”,是指當(dāng)數(shù)據(jù)改變后,Vue會(huì)通知到使用該數(shù)據(jù)的代碼。例如,視圖渲染中使用了數(shù)據(jù),數(shù)據(jù)改變后,視圖也會(huì)自動(dòng)更新。 vue2.X的數(shù)據(jù)響應(yīng)式是利用 Object.defineProperty() 實(shí)現(xiàn)的,通過定義對(duì)象屬性 getter/setter 攔截對(duì)屬性的獲取和

    2024年02月15日
    瀏覽(23)
  • 手寫Vue3響應(yīng)式數(shù)據(jù)原理

    手寫Vue3響應(yīng)式數(shù)據(jù)原理

    我們想要對(duì)一個(gè)對(duì)象數(shù)據(jù)進(jìn)行處理,從而實(shí)現(xiàn)更改dom。但如何更改對(duì)一個(gè)對(duì)象數(shù)據(jù)進(jìn)行更改呢? vue2 的雙向數(shù)據(jù)綁定是利?ES5 的?個(gè) API ,Object.defineProperty()對(duì)數(shù)據(jù)進(jìn)?劫持 結(jié)合 發(fā)布訂閱模式的?式來實(shí)現(xiàn)的。 vue3 中使?了 ES6 的 ProxyAPI 對(duì)數(shù)據(jù)代理,通過 reactive() 函數(shù)給每?

    2024年02月11日
    瀏覽(19)
  • JS-27 前端數(shù)據(jù)請(qǐng)求方式;HTTP協(xié)議的解析;JavaScript XHR、Fetch的數(shù)據(jù)請(qǐng)求與響應(yīng)函數(shù);前端文件上傳XHR、Fetch;安裝瀏覽器插件FeHelper

    JS-27 前端數(shù)據(jù)請(qǐng)求方式;HTTP協(xié)議的解析;JavaScript XHR、Fetch的數(shù)據(jù)請(qǐng)求與響應(yīng)函數(shù);前端文件上傳XHR、Fetch;安裝瀏覽器插件FeHelper

    早期的網(wǎng)頁都是通過后端渲染來完成的,即服務(wù)器端渲染(SSR,server side render): 客戶端發(fā)出請(qǐng)求 - 服務(wù)端接收請(qǐng)求并返回相應(yīng)HTML文檔 - 頁面刷新,客戶端加載新的HTML文檔; 服務(wù)器端渲染的缺點(diǎn): 當(dāng)用戶點(diǎn)擊頁面中的某個(gè)按鈕向服務(wù)器發(fā)送請(qǐng)求時(shí),頁面本質(zhì)上只是一些數(shù)

    2024年02月16日
    瀏覽(42)
  • 前端開發(fā)攻略---從源碼角度分析Vue3的Propy比Vue2的defineproperty到底好在哪里。一篇文章讓你徹底弄懂響應(yīng)式原理。

    前端開發(fā)攻略---從源碼角度分析Vue3的Propy比Vue2的defineproperty到底好在哪里。一篇文章讓你徹底弄懂響應(yīng)式原理。

    Vue的響應(yīng)式到底要干什么? 無非就是要知道當(dāng)你 讀取 對(duì)象的時(shí)候,要知道它讀了。要做一些別的事情 無非就是要知道當(dāng)你 修改 對(duì)象的時(shí)候,要知道它改了。要做一些別的事情 所以要想一個(gè)辦法, 把讀取和修改的動(dòng)作變成一個(gè)函數(shù) ,讀取和修改的時(shí)候分別調(diào)用對(duì)應(yīng)的函數(shù)

    2024年04月17日
    瀏覽(35)
  • 前端開發(fā),Vue的雙向數(shù)據(jù)綁定的原理

    前端開發(fā),Vue的雙向數(shù)據(jù)綁定的原理

    目錄 一、什么是前端 二、Vue.JS框架 三、雙向數(shù)據(jù)綁定 四、Vue的雙向數(shù)據(jù)綁定的原理 前端通常指的是網(wǎng)頁或應(yīng)用程序中用戶直接交互和感知的部分,也稱為客戶端。前端開發(fā)涉及使用HTML、CSS和JavaScript等技術(shù)來構(gòu)建用戶界面和交互功能。前端開發(fā)人員負(fù)責(zé)確保網(wǎng)站或應(yīng)用程序

    2024年02月19日
    瀏覽(17)
  • vue響應(yīng)式原理

    以下是Vue響應(yīng)式原理的簡要解釋: 1、Object.defineProperty: Vue使用了Object.defineProperty這個(gè)JavaScript特性,它允許在對(duì)象上定義新的屬性或修改現(xiàn)有屬性的特性。vue通過這個(gè)特性來劫持(監(jiān)聽)數(shù)據(jù)的變化。這意味著,當(dāng)你訪問或修改對(duì)象的屬性時(shí),Vue能夠介入這個(gè)過程,執(zhí)行一些

    2024年01月24日
    瀏覽(17)
  • 圖解 Vue 響應(yīng)式原理

    圖解 Vue 響應(yīng)式原理

    Vue 初始化 模板渲染 組件渲染 為了便于理解,本文將從以下兩個(gè)方面進(jìn)行探索: 從 Vue 初始化,到首次渲染生成 DOM 的流程。 從 Vue 數(shù)據(jù)修改,到頁面更新 DOM 的流程。 先從最簡單的一段 Vue 代碼開始: \\\"\\\"\\\" \\\"\\\"\\\" 這段代碼很簡單,最終會(huì)在頁面上打印一個(gè) hello world,它是如何實(shí)

    2024年02月16日
    瀏覽(22)
  • vue3響應(yīng)式原理

    vue3響應(yīng)式原理

    Vue 3 中的響應(yīng)式原理是通過使用 ES6 的 Proxy 對(duì)象來實(shí)現(xiàn)的。在 Vue 3 中,每個(gè)組件都有一個(gè)響應(yīng)式代理對(duì)象,當(dāng)組件中的數(shù)據(jù)發(fā)生變化時(shí),代理對(duì)象會(huì)立即響應(yīng)并更新視圖。 具體來說,當(dāng)一個(gè)組件被創(chuàng)建時(shí),Vue 會(huì)為組件的 data 對(duì)象創(chuàng)建一個(gè)響應(yīng)式代理對(duì)象。這個(gè)代理對(duì)象可以

    2024年02月15日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包