Vue2 和Vue3 双向数据绑定的区别和原理

Vue 2 和 Vue 3 的双向数据绑定原理基本相同,都是基于 JavaScript 的特性实现的,但在实现细节上有一些区别。

在 Vue 2 中,双向数据绑定是通过 Object.defineProperty 实现的。Vue 2 会使用 Object.defineProperty 为数据对象的每个属性创建 gettersetter,当属性被访问或修改时,Vue 2 可以通过 gettersetter 捕获这些操作,从而实现数据的响应式更新。

在 Vue 3 中,双向数据绑定是通过 Proxy 实现的。Proxy 提供了更多的拦截操作,不仅可以拦截属性的访问和修改,还可以拦截删除操作、检查操作等。这使得 Vue 3 的数据响应系统更强大、更灵活。

双向数据绑定的工作流程如下:

当你修改数据时,Vue 会通过 setter 捕获这个操作,然后更新视图。
当你在视图中进行操作(例如输入文本或点击按钮)时,Vue 会更新对应的数据。
这种机制使得数据和视图始终保持同步,你只需要关注数据的变化,不需要手动操作 DOM,这大大简化了开发工作

Vue2双向数据绑定示例:

let data = {};
let internalValue = '';Object.defineProperty(data, 'message', {get() {console.log('Get:', internalValue);return internalValue;},set(newVal) {console.log('Set:', newVal);internalValue = newVal;}
});data.message = 'Hello';  // Set: Hello
console.log(data.message);  // Get: Hello

在这个例子中,我们为 data 对象的 message 属性定义了 getter 和 setter。当 message 属性被访问或修改时,我们可以通过 getter 和 setter 捕获这些操作。

Vue 2 的双向数据绑定就是基于这个原理实现的。当你修改数据时,Vue 2 会通过 setter 捕获这个操作,然后更新视图。当你在视图中进行操作(例如输入文本或点击按钮)时,Vue 2 会更新对应的数据。

需要注意的是,这只是 Vue 2 双向数据绑定的一个简化示例。实际上,Vue 2 的实现会更复杂,它需要处理数组、嵌套对象、依赖追踪、异步更新队列等多种情况。

Vue3双向数据绑定示例:

let data = {message: ''
};let proxyData = new Proxy(data, {get(target, prop) {console.log(`Get: ${prop}`);return target[prop];},set(target, prop, value) {console.log(`Set: ${prop} = ${value}`);target[prop] = value;return true;}
});proxyData.message = 'Hello';  // Set: message = Hello
console.log(proxyData.message);  // Get: message

在这个例子中,我们创建了一个 Proxy 对象,为 data 对象的 message 属性定义了 getter 和 setter。当 message 属性被访问或修改时,我们可以通过 getter 和 setter 捕获这些操作。

Vue 3 的双向数据绑定就是基于这个原理实现的。当你修改数据时,Vue 3 会通过 setter 捕获这个操作,然后更新视图。当你在视图中进行操作(例如输入文本或点击按钮)时,Vue 3 会更新对应的数据。

需要注意的是,这只是 Vue 3 双向数据绑定的一个简化示例。实际上,Vue 3 的实现会更复杂,它需要处理数组、嵌套对象、依赖追踪、异步更新队列等多种情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformer的前世今生 day04(ELMO、Attention注意力机制)

ELMO 前情回顾 NNLM模型:主要任务是在预测下一个词,副产品是词向量Word2Vec模型:主要任务是生成词向量 CBOW:训练目标是根据上下文预测目标词Skip-gram:训练目标是根据目标词预测上下文词 ELMO模型的流程 针对Wor…

矩形相交问题

给出左下和右上的坐标,判断矩形是否相交,并求出相交的区域 思路:从矩形中点间的横纵坐标距离判断 矩形A:左下坐标(A1,A2)右上坐标(A3,A4) 矩形B:左…

科研学习|论文解读——了解在线环境中的多数观点形成过程:Facebook的探索性方法(IPM, 2018)

论文标题 Understanding the majority opinion formation process in online environments: An exploratory approach to Facebook 摘要 在在线社区的社会互动过程中,多数观点经常被观察到,但很少有研究用实证数据来解决这一问题。为了确定一个合适的理论视角来解释在…

软件推动开放自动化落地

当你唯一拥有的是一把锤子时,你周围的一切都是钉子。 软件是硬件设备的护城河,国际自动化厂商不遗余力地开发各种新型工业软件,其战略站在应用的制高点。以前我们追求硬件兼容,现在我们要致力于应用引领。如果我们拥有强大的SCADA…

js封装SDK 在VUE、小程序、公众号直接调用js调用后端接口(本文以vue项目为例)

1.封装一个js文件msgSdk.js 注意:需要修改这个请求地址 apiServiceAddress ;(function () {if (window.msgSdk) {return}var msgSdk (function () {var m_msgSdk thisvar apiServiceAddress"http://172.12.14.5:8000"this.I_SendHTTPRequest functi…

Linux账号管理与ACL权限设置

文章目录 Linux的账户和用户组用户标识符:UID与GID用户账号用户组:有效与初始用户组groups,newgrp 账号管理新增与删除用户:useradd、相关配置文件、passwd、usermod、userdel用户功能:id、finger、chfn、chsh新增与删…

HANA VIEW 用 ABAP 创建CDS VIEW,在生成ODATA

这里我们做ADT来创建 场景介绍:把hana中的一个底表,创建成ABAP的 CDS VIEW ,在把CDS VIEW 生成 OData 服务。 一、创建CDS Table Function 红框内根据自身情况填写 选择 Define Table Function with Parameters 创建 Data Definition 完整代码,定义 结构 , 也可以定义参…

Grok ChatLaw

Grok是马斯克旗下的AI公司推出的一款革命性产品,它提供了创新且可靠的数据分析和决策支持平台1。Grok的技术解决方案主要包括以下几个方面: 强大的数据处理能力:Grok能够处理大规模的数据,并从中提取出有价值的信息和洞察。 先进…

centos7安装jdk详细步骤(yum安装与手动安装)

centos7安装jdk详细步骤(yum安装与手动安装) 一、使用yum安装1. 准备工作2. 检查系统是否自带jdk3. 安装jdk 二、手动安装jdk1. 下载上传jdk2. 安装jdk3. 配置环境变量 一、使用yum安装 1. 准备工作 如果你的机器可以联网可以使用此方法 ping www.baidu…

Java基础学习笔记二

Java的加载与执行 Java既是编译型语言又是解释型语言 question:为什么JVM可以跨平台执行 answer : Java虚拟机(JVM)之所以能够跨平台执行,是因为它在不同操作系统上提供了一个统一的运行环境,实现了Java程…

‘‘ is not a package AttributeError: module ‘‘ has no attribute ‘__path__‘报错解决

报错: No module named ‘ldm.util’; ‘ldm’ is not a package AttributeError: module ‘ldm’ has no attribute ‘__ path__’ 原因: 1.首先这个引用没有被画横线,说明包存在,并且也在包目录底下添加了__init__.py文件 &am…

C++ Qt开发:QUdpSocket实现组播通信

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUdpSocket组件实现基于UDP的组播通信…

四川易点慧电子商务抖音小店:值得信赖的购物新选择

随着互联网的飞速发展,电子商务平台如雨后春笋般涌现,为消费者提供了前所未有的购物便利。在众多电商平台中,四川易点慧电子商务抖音小店以其独特的魅力和优质的服务,赢得了广大消费者的青睐和信任。 四川易点慧电子商务抖音小店以…

C++中的Union: 内存与类型转换技巧

在C中,union是一种特殊的数据类型,允许在相同的内存位置存储不同类型的数据。union提供了一种高效地利用内存的方式,但同时也要求开发者更加小心地处理数据以避免类型错误。 1. 基本定义 union定义了一个可以存储多种类型但任意时刻只能存储…

Python之进程池、阻塞模式、非阻塞模式、进程间的通信、queue

非阻塞模式 # 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程 # 但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法. # 初始化Poo1时&…

HTTPS 为什么比HTTP安全?

HTTPS(Hyper Text Transfer Protocol Secure)比 HTTP(Hyper Text Transfer Protocol)更安全,主要是因为 HTTPS 在 HTTP 的基础上添加了 SSL/TLS 协议,用于对数据进行加密,保证数据在传输过程中的…

数据库中SQL语句where 1=1和where 1=0

1、 背景 在实际的数据库查询中,常常会看到一些特殊的SQL语句构造,如WHERE 11、WHERE 10等,它们虽然看起来有些奇特,但在实际应用中确实有一些妙用。 其中WHERE 11用于动态构建查询条件,而WHERE 10通常用于强制不返回…

[C++] 实现Union

前几天学了replacement new写的小玩意 #include <iostream> #include <functional> #include <string>// 可能因为const char*类型的缘故 // 用const ArgsT&&...会报错// 测试用类 struct Test {Test(){std::cout << "constructed"…

Gif动态闪图如何制作?教你1分钟快速制作

动态文字闪图是一种独特而有趣的图像效果&#xff0c;通过将文字以闪烁、跳动或变换的方式呈现&#xff0c;给人一种动态感和视觉冲击力。如果你想制作自己的动态文字闪图&#xff0c;下面是一些简单的方法来帮助你完成这个任务。使用在线闪图制作网站-GIF5工具网&#xff0c;无…

国内外15款AI搜索引擎汇总

AI大模型的一个痛点就是训练数据有截止日期&#xff0c;例如chatgpt的训练数据截止日期是2021年10月。这导致模型回答截止日期之后产生的新闻事件或者专业知识时不够准确。 将AI和搜索引擎结合起来&#xff0c;似乎是一种解决方式。 目前&#xff0c;国内外公布了不少AI搜索引…