202 vue2的响应式原理 通俗易懂!

这篇具有很好参考价值的文章主要介绍了202 vue2的响应式原理 通俗易懂!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、vue2的响应式原理?

1.1、前言

Object.defineProperty+依赖追踪

在Vue实例化过程中,会递归地将每个数据对象属性转换为getter/setter,并维护一个依赖收集器(Dep)每个属性都有一个关联的watcher,当数据发生变化时watcher被通知更新视图

Vue 2.x 实现响应式数据:

<div id="app">
  <p>{{ message }}</p>
  <button @click="updateMessage">Update Message</button>
  </div>
const app = new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue!'
  },
  methods: {
    updateMessage() {
      this.message = 'Hello, World!';
    }
  }
});

vue实例化时,会将message属性转换为 getter/setter,并添加到依赖收集器中。当属性值变化时,依赖收集器通知相关的watcher更新视图。

1.2、如何转为getter/setter

在 Vue2.X 中,可以使用 Object.defineProperty() 将属性转换为 getter/setter。这个方法接收三个参数:对象属性名称和一个描述符对象

示例代码:

/*
 * @Description:
 * @Author: muge
 * @Date: 2022-10-03 12:01:03
 * @LastEditors: muge
 * @LastEditTime: 2023-05-20 14:33:35
 */
var obj = {}; // 创建一个空对象
// 定义一个属性 name,并将其转换为 getter/setter
Object.defineProperty(obj, "name", {
  get: function () {
    console.log("获取 name 属性");
    return this._name;
  },
  set: function (value) {
    console.log("设置 name 属性为", value);
    this._name = value;
  },
});
// 使用属性
obj.name = "muge"; // 调用 setter
console.log(obj.name); // 调用 getter,打印 'muge'

我们将 obj 对象的 name 属性转换为 getter/setter。当获取 name 属性时,get() 方法会被调用。当设置 name 属性时,set() 方法会被调用。

1.3、为什么Vue 2.x只能追踪对象属性的变化,无法直接追踪数组的变化?

1.3.1、前言

因为数组的属性名是数字,内置方法(如 push、pop、splice 等)可以改变数组长度或元素值等。导致无法对数组进行有效监听,使得数组的数据变化无法自动触发视图更新。

如 push 方法添加元素,可以改变数组的长度,但不会触发对应下标的 setter 方法

1.3.2、解决

使用Vue 提供的$set$delete 等数组方法。文章来源地址https://www.toymoban.com/news/detail-456892.html

到了这里,关于202 vue2的响应式原理 通俗易懂!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue2、vue3、react响应式原理、组件声明周期阐述与对比

    响应式原理: Vue.js 的响应式原理是通过使用 Object.defineProperty 函数来实现的。在 Vue.js 中,当一个对象被传入 Vue 实例的 data 选项中时,Vue.js 会将这个对象的属性转换为 getter 和 setter,以便在属性被访问或修改时能够触发相应的更新。 具体来说,Vue.js 会在实例化过程中递归

    2024年02月06日
    浏览(53)
  • 通俗易懂的GPT原理简介

            GPT是自然语言处理领域中最受欢迎的模型之一。GPT全称为Generative Pre-trained Transformer,是一种基于Transformer模型的预训练语言模型。在接下来的文章中,我们将详细介绍GPT的原理。         在了解GPT原理之前,需要了解以下一些基础知识: 1.自然语言处理:自然语言处

    2024年02月05日
    浏览(44)
  • 最通俗易懂的讲解HTTPS的加密原理【多图、易懂】

    目录 前言 HTTPS加密原理概述 HTTP 为什么不安全 安全通信的四大原则 HTTPS 通信原理 对称加密:HTTPS 的最终加密形式 非对称加密:解决单向的对称密钥的传输问题 数字证书:解决公钥传输信任问题 证书一整个被掉包怎么办? 总结 其它 HTTPS 相关问题 什么是双向认证? 什么是

    2024年02月05日
    浏览(61)
  • 通俗易懂的ChatGPT的原理简介

          本文介绍了ChatGPT的原理及应用。ChatGPT是基于GPT模型的自然语言处理技术,可以进行语言理解、文本生成、对话生成等多种应用。其基本原理是通过训练大规模语料库中的数据,生成模型,从而实现自然语言处理的任务。本文着重介绍了ChatGPT的训练方法和应用场景,并

    2023年04月19日
    浏览(42)
  • 数据结构:Mysql索引原理(通俗易懂)

    在工作中如果经常写业务代码,说白了就是CURD,比如做一个查询功能,我们会将前端参数传递到后端后拼接SQL查询数据,那为了提高用户体验,查询速度肯定是越快越好,这就要求我们能够对SQL调优,让查询速度更快。 由于数据需要持久化,且数据量庞大,所以只能将数据

    2024年02月11日
    浏览(51)
  • 通俗易懂生成对抗网络GAN原理(二)

    学习李宏毅机器学习课程总结。 前面学习了GAN的直观的介绍,现在学习GAN的基本理论。现在我们来学习GAN背后的理论。 假设x是一张图片(一个高维向量),如64 * 64 * 3的图片,每个图片都是高维空间中的一个点。为了画图方便,我们就画成二维上的点。在高维空间中,只有

    2024年02月12日
    浏览(46)
  • JVM原理:JVM运行时内存模型(通俗易懂)

    做了几年开发,平时除了写代码造BUG和修复BUG之外,偶尔也会遇到反馈说程序较慢问题,要对程序性能排查与优化就得更深入学习,学习JVM可以帮助我们加深对JAVA的理解,让我们具备一定的性能排查与调优的能力,无非就是让程序别太卡或者别挂了,那挂了目前我遇到的主要

    2024年02月08日
    浏览(55)
  • 【通俗易懂】git原理、安装及连接gitlab,github

    目录 一、GIT原理【这部分也挺简单,可以看看,如果没时间可以直接跳到第二部分】 SVN与Git的的区别 二、安装Git   2.1 获取Git安装程序 2.2 Git安装过程 三、Git连接Gitlab 3.1 gitlab准备工作 3.2 本地计算机准备工作及配置git   四、Git连接Github Git 是一种分布式版本控制系统,用

    2024年02月22日
    浏览(43)
  • 用通俗易懂的方式讲解:CatBoost 算法原理及案例

    前面已讲了7节,为方便大家学习,我总结在一起,无论是日常实践还是面试使用,都非常方便,喜欢记得收藏 用通俗易懂的方式讲解:逻辑回归模型及案例(Python 代码) 用通俗易懂的方式讲解:决策树模型及案例(Python 代码) 用通俗易懂的方式讲解: 随机森林及案例(

    2024年04月12日
    浏览(43)
  • Vue中的MVVM模型(通俗易懂版)

    MVVM是Model-View-ViewModel的简写,是M - V - VM 三部分组成。 本质:是MVC改进版 MVVM就是将其中View的状态和行为抽象化,其中ViewModel将试图(即View)和业务逻辑分开,它可以去除Model的数据的同时帮忙处理View中由于需要展示内容而涉及的业务逻辑。 MVVM采用: 双向数据绑定。 View中

    2023年04月26日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包