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

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

 更新時(shí)間:2023年08月13日 10:12:14   作者:小吳吳吳呀  
在vue2的響應(yīng)式中,存在著添加屬性、刪除屬性、以及通過下標(biāo)修改數(shù)組,但頁面不會(huì)自動(dòng)更新的問題,而這些問題在vue3中都得以解決,本文就給大家詳細(xì)的介紹一下Vue響應(yīng)式數(shù)據(jù)原理,感興趣的小伙伴跟著小編一起來看看吧

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

注:讀取時(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)更新。

注:在使用 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ù)

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

到此這篇關(guān)于一文詳解Vue響應(yīng)式數(shù)據(jù)的原理的文章就介紹到這了,更多相關(guān)Vue響應(yīng)式數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue利用computer解決單項(xiàng)數(shù)據(jù)流的問題詳解

    Vue利用computer解決單項(xiàng)數(shù)據(jù)流的問題詳解

    Vue 是一個(gè)非常流行和強(qiáng)大的前端框架,它讓我們可以用簡(jiǎn)潔和優(yōu)雅的方式來構(gòu)建用戶界面,今天我們來分享一個(gè) Vue 中非常經(jīng)典的問題,也是一個(gè)非常實(shí)用的技巧,希望對(duì)大家有所幫助
    2023-07-07
  • 詳解vue中v-on事件監(jiān)聽指令的基本用法

    詳解vue中v-on事件監(jiān)聽指令的基本用法

    這篇文章主要介紹了詳解vue中v-on事件監(jiān)聽指令的基本用法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • vue3中vite.config.js相關(guān)常用配置超詳細(xì)講解

    vue3中vite.config.js相關(guān)常用配置超詳細(xì)講解

    在Vue3項(xiàng)目中vite.config.js文件是Vite構(gòu)建工具的配置文件,它用于定義項(xiàng)目的構(gòu)建和開發(fā)選項(xiàng),這篇文章主要介紹了vue3中vite.config.js相關(guān)常用配置的相關(guān)資料,需要的朋友可以參考下
    2025-04-04
  • Vue動(dòng)態(tài)引用json數(shù)據(jù)的兩種方式

    Vue動(dòng)態(tài)引用json數(shù)據(jù)的兩種方式

    在 Vue 項(xiàng)目中引用 JSON 文件非常簡(jiǎn)單,尤其是當(dāng)文件內(nèi)容是一個(gè)數(shù)組時(shí),本文給大家介紹了Vue動(dòng)態(tài)引用json數(shù)據(jù)的兩種方式,并有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2025-04-04
  • vue-cli4.0多環(huán)境配置變量與模式詳解

    vue-cli4.0多環(huán)境配置變量與模式詳解

    這篇文章主要介紹了vue-cli4.0多環(huán)境配置變量與模式詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Element 頭像上傳的實(shí)戰(zhàn)

    Element 頭像上傳的實(shí)戰(zhàn)

    頭像上傳在很多實(shí)例中都可以用到,本文主要介紹了Element 頭像上傳,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue頁面切換項(xiàng)目實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫的方法

    vue頁面切換項(xiàng)目實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫的方法

    這篇文章主要介紹了vue頁面切換項(xiàng)目實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 詳解如何在Vue3+TS的項(xiàng)目中使用NProgress進(jìn)度條

    詳解如何在Vue3+TS的項(xiàng)目中使用NProgress進(jìn)度條

    本文主要介紹了詳解如何在Vue3+TS的項(xiàng)目中使用NProgress進(jìn)度條,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 基于Vue的前端界面實(shí)現(xiàn)日期時(shí)間實(shí)時(shí)顯示簡(jiǎn)單代碼

    基于Vue的前端界面實(shí)現(xiàn)日期時(shí)間實(shí)時(shí)顯示簡(jiǎn)單代碼

    今天在項(xiàng)目中有一個(gè)功能是要求顯示北京的實(shí)時(shí)時(shí)間,下面這篇文章主要給大家介紹了關(guān)于如何基于Vue的前端界面實(shí)現(xiàn)日期時(shí)間實(shí)時(shí)顯示的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • 深入Vue-Router路由嵌套理解

    深入Vue-Router路由嵌套理解

    這篇文章主要介紹了深入Vue-Router路由嵌套理解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08

最新評(píng)論

岫岩| 汉中市| 明水县| 鞍山市| 随州市| 长治市| 瑞昌市| 博兴县| 修武县| 福海县| 墨江| 普宁市| 嫩江县| 酉阳| 南汇区| 类乌齐县| 姚安县| 屏边| 沙湾县| 修水县| 克东县| 光泽县| 丰都县| 陇西县| 华安县| 灵宝市| 阜宁县| 萍乡市| 铜陵市| 当涂县| 玛纳斯县| 肇州县| 沐川县| 福州市| 山阴县| 方城县| 宁夏| 姜堰市| 日土县| 乌恰县| 沂南县|