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.mzph.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;并分享给更多对数据结构感…