Vue2和Vue3響應式的基本實現

目錄

  • 簡介
  • Vue2 響應式
    • Vue2 響應式的局限性
  • Vue3 響應式
    • Vue3 響應式的優點
  • Vue2 和 Vue3 響應式對比

簡介

在 Vue 框架中,數據的響應式是其核心特性之一。當頁面數據發生變化時,我們希望界面能自動更新,而不是手動操作 DOM。這就需要對數據進行監聽,并在數據變更時觸發 UI 重新渲染。
Vue2 和 Vue3 在實現響應式的方式上有所不同,Vue2 主要依賴 Object.defineProperty,而 Vue3 則引入了 Proxy,大大優化了響應式系統的性能和靈活性。它們都是通過函數來封裝響應式對象,方便讀取或更新數據時能夠進行其他的操作。

Vue2 響應式

Vue2 使用 Object.defineProperty 來攔截對象屬性的訪問和修改,從而實現響應式。

const obj = {a: 1,b: 2,c: {x: 66,y: 2,}
}function isObject(v) {return typeof v === 'object' && v !== null;
}function observe(obj) {for (const k in obj) {let v = obj[k];if (isObject(v)) observe(v); // 遞歸遍歷Object.defineProperty(obj, k, {get() {console.log(`讀取${k}, 值${v}`);return v;},set(newVal) {v = newVal;console.log(`更新${k}, 值${v}`);}});}
}observe(obj);obj.a;
obj.a = 101;
obj.c.x;
obj.c.x = 166;

在這里插入圖片描述

Vue2 響應式的局限性

  • 需要遍歷對象的每個屬性,性能較低。
  • 不能檢測到新增或刪除的屬性。
  • 需要手動調用 Vue.set() 以確保新屬性的響應式。

Vue3 響應式

Vue3 使用 Proxy 實現響應式,可以直接監聽整個對象,而不是逐個屬性。

const obj = {a: 1,b: 2,c: {x: 1,y: 2,}
};function isObject(v) {return typeof v === 'object' && v !== null;
}function reactive(target) {return new Proxy(target, {get(target, k) {console.log(`讀取: ${k}, 值: ${target[k]}`);// 讀取時才遞歸生成代理if (isObject(target[k])) return reactive(target[k]);return target[k];},set(target, k, newVal) {if (newVal === target[k]) return;console.log(`更新: ${k}, 值${newVal}`);target[k] = newVal;return true;}});
}const proxy = reactive(obj);proxy.a;
proxy.a = 100;
proxy.c.x;

在這里插入圖片描述

Vue3 響應式的優點

  • 直接監聽整個對象,無需遍歷所有屬性。
  • 可以檢測到屬性的新增和刪除。
  • 具有更好的性能和更簡潔的代碼結構。

Vue2 和 Vue3 響應式對比

對比項Vue2 (Object.defineProperty)Vue3 (Proxy)
監聽方式逐個屬性攔截整個對象攔截
深度監聽需要遞歸處理訪問時自動代理
屬性新增刪除需要 Vue.set() 處理可直接監聽
數組監聽需要重寫數組方法原生支持
性能需要遍歷所有屬性,較低直接代理整個對象,更高
兼容性兼容性好,支持 ES5 及以上需要 ES6 Proxy 支持

Vue3 通過 Proxy 解決了 Vue2 的許多缺陷,使得響應式系統更加高效、靈活和簡潔。因此,Vue3 的響應式能力遠超 Vue2。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74046.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74046.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74046.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux系統中快速安裝docker

1 查看是否安裝docker 要檢查Ubuntu是否安裝了Docker,可以使用以下幾種方法: 方法1:使用 docker --version 命令 docker --version如果Docker已安裝,輸出會顯示Docker的版本信息,例如: Docker version …

ElasticSearch 分詞器

文章目錄 一、安裝中文分詞插件Linux安裝7.14.1版本:測試1:ik_smart測試2:ik_max_word 二、es內置的分詞器:三、拼音插件安裝以及(IKpinyin使用)配置 IK pinyin 分詞配置 一、安裝中文分詞插件 IK Analys…

arm64位FFmpeg與X264庫

參考鏈接: https://blog.csdn.net/gitblog_09700/article/details/142945092

機器學習與深度學習4:數據集處理Dataset,DataLoader,batch_size

深度學習中,我們能看到別人的代碼中都有一個繼承Dataset類的數據集處理過程,這也是深度學習處理數據集的的基礎,下面介紹這個數據集的定義和使用: 1、數據集加載 1.1 通用的定義 Bach:表示每次喂給模型的數據 Epoc…

MySQL數據庫和表的操作之SQL語句

🎯 本文專欄:MySQL深入淺出 🚀 作者主頁:小度愛學習 MySQL數據庫和表的操作 關系型數據庫,都是遵循SQL語法進行數據查詢和管理的。 SQL語句 什么是sql SQL:結構化查詢語言(Structured Query Language)&…

ubuntu開發mcu環境

# 編輯 vim或者vscode # 編譯 arm-none-eabi # 燒寫 openocd 若是默認安裝,會在/usr/share/openocd/scripts/{interface,target} 有配置接口和目標版配置 示例: openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg 啟動后,會…

Windows模仿Mac大小寫切換, 中英文切換

CapsLock 功能優化腳本部署指南 部署步驟 第一步:安裝 AutoHotkey v2 訪問 AutoHotkey v2 官網下載并安裝最新版本安裝時勾選 "Add Compile Script to context menus" 第二步:部署腳本 直接運行 (調試推薦) 新建文本文件,粘貼…

Selenium Web自動化如何快速又準確的定位元素路徑,強調一遍是元素路徑

如果文章對你有用,請給個贊! 匹配的ChromeDriver和瀏覽器版本是更好完成自動化的基礎,可以從這里去下載驅動程序: 最全ChromeDriver下載含win linux mac 最新版本134.0.6998.165 持續更新..._chromedriver 134-CSDN博客 如果你問…

CSRF vs SSRF詳解

一、CSRF&#xff08;跨站請求偽造&#xff09;攻擊全解 攻擊原理示意圖 受害者瀏覽器 ├── 已登錄銀行網站&#xff08;Cookie存活&#xff09; └── 訪問惡意網站執行&#xff1a;<img src"http://bank.com/transfer?tohacker&amount1000000">核心…

Python PDF解析利器:pdfplumber | AI應用開發

Python PDF解析利器&#xff1a;pdfplumber全面指南 1. 簡介與安裝 1.1 pdfplumber概述 pdfplumber是一個Python庫&#xff0c;專門用于從PDF文件中提取文本、表格和其他信息。相比其他PDF處理庫&#xff0c;pdfplumber提供了更直觀的API和更精確的文本定位能力。 主要特點…

niuhe 插件教程 - 配置 MCP讓AI更聰明

niuhe 插件官方教程已經上線, 請訪問: http://niuhe.zuxing.net niuhe 連接 MCP 介紹 API 文檔的未來&#xff1a;MCP&#xff0c;讓協作像聊天一樣簡單. MCP 是 Model Context Protocol(模型上下文協議)的縮寫&#xff0c;是 2024 年 11 月 Claude 的公司 Anthropic 推出并開…

26考研——排序_插入排序(8)

408答疑 文章目錄 二、插入排序基本概念插入排序方法直接插入排序算法描述示例性能分析 折半插入排序改進點算法步驟性能分析 希爾排序相關概念示例分析希爾排序的效率效率分析空間復雜度時間復雜度 九、參考資料鮑魚科技課件26王道考研書 二、插入排序 基本概念 定義&#x…

精華貼分享|從不同的交易理論來理解頭肩形態,殊途同歸

本文來源于量化小論壇策略分享會板塊精華帖&#xff0c;作者為孫小迪&#xff0c;發布于2025年2月17日。 以下為精華帖正文&#xff1a; 01 前言 學習了一段時間交易后&#xff0c;我發現在幾百年的歷史中&#xff0c;不同門派的交易理論對同一種市場特征的稱呼不一樣&#x…

leetcode437.路徑總和|||

對于根結點來說&#xff0c;可以選擇當前結點為路徑也可以不選擇&#xff0c;但是一旦選擇當前結點為路徑那么后續都必須要選擇結點作為路徑&#xff0c;不然路徑不連續是不合法的&#xff0c;所以這里分開出來兩個方法進行遞歸 由于力扣最后一個用例解答錯誤&#xff0c;分析…

北斗導航 | 改進奇偶矢量法的接收機自主完好性監測算法原理,公式,應用,RAIM算法研究綜述,matlab代碼

改進奇偶矢量法的接收機自主完好性監測算法研究 摘要 接收機自主完好性監測(RAIM)是保障全球導航衛星系統(GNSS)安全性的核心技術。針對傳統奇偶矢量法在噪聲敏感性、多故障隔離能力上的缺陷,本文提出一種基于加權奇偶空間與動態閾值的改進算法。通過引入觀測值權重矩陣重…

深度神經網絡全解析:原理、結構與方法對比

深度神經網絡全解析&#xff1a;原理、結構與方法對比 1. 引言 隨著人工智能的發展&#xff0c;深度神經網絡&#xff08;Deep Neural Network&#xff0c;DNN&#xff09;已經成為圖像識別、自然語言處理、語音識別、自動駕駛等領域的核心技術。相比傳統機器學習方法&#x…

經典論文解讀系列:MapReduce 論文精讀總結:簡化大規模集群上的數據處理

&#x1f9e0; MapReduce 論文解讀總結&#xff1a;簡化大規模集群上的數據處理 原文標題&#xff1a;MapReduce: Simplified Data Processing on Large Clusters 作者&#xff1a;Jeffrey Dean & Sanjay Ghemawat 發表時間&#xff1a;2004 年 發表機構&#xff1a;Google…

通過Appium理解MCP架構

MCP即Model Context Protocol&#xff08;模型上下文協議&#xff09;&#xff0c;是由Anthropic公司于2024年11月26日推出的開放標準框架&#xff0c;旨在為大型語言模型與外部數據源、工具及系統建立標準化交互協議&#xff0c;以打破AI與數據之間的連接壁壘。 MCP架構與Appi…

網頁版五子棋項目的問題處理

文章目錄 config.WebSocketConfig將鍵值對加?OnlineUserManager中線程安全、鎖ObjectMapper來處理json針對多開情況的判定處理連接關閉、異常&#xff08;玩家中途退出&#xff09;后的不合理操作游戲大廳數據更新 config.WebSocketConfig 把MatchAPI注冊進去 ? 在addHandle…

【初探數據結構】歸并排序與計數排序的序曲

&#x1f4ac; 歡迎討論&#xff1a;在閱讀過程中有任何疑問&#xff0c;歡迎在評論區留言&#xff0c;我們一起交流學習&#xff01; &#x1f44d; 點贊、收藏與分享&#xff1a;如果你覺得這篇文章對你有幫助&#xff0c;記得點贊、收藏&#xff0c;并分享給更多對數據結構感…