vue响应式原理

文章目录


Vue的响应式原理通俗来说,是当你修改vue实例中的数据时,相关的视图会自动更新,反之亦然。

以下是Vue响应式原理的简要解释:
1、Object.defineProperty: Vue使用了Object.defineProperty这个JavaScript特性,它允许在对象上定义新的属性或修改现有属性的特性。vue通过这个特性来劫持(监听)数据的变化。这意味着,当你访问或修改对象的属性时,Vue能够介入这个过程,执行一些自定义的逻辑。
例子:

const data = {
    message: 'Hello, Vue!' };
// Vue通过Object.defineProperty监听data对象的message属性
Object.defineProperty(data, 'message', {
   
  get() {
   
    console.log('Getter is called');
    return 'Intercepted: ' + this._message;
  },
  set(newValue) {
   
    console.log('Setter is called');
    this._message = newValue;
  },
});

// 访问data.message,实际上调用了get()方法
console.log(data.message); // 输出:Getter is called \n Intercepted: Hello, Vue!

// 修改data.message,实际上调用了set()方法
data.message = 'New Message'; // 输出:Setter is called

2、Getter 和 Setter: 对象的每个属性都有一个getter(获取值)和一个setter(设置值)。当你访问对象的属性时,getter被调用,当你修改属性时,setter被调用。Vue通过setter捕捉到数据的变化。

3、依赖追踪: Vue通过一个全局的Dep对象来管理依赖追踪。每个被观察的对象(响应式数据)都有一个对应的Dep实例,用于存储所有依赖于该对象的Watcher。

4、Watcher: Watcher是观察者对象,它负责在数据变化时执行相应的更新操作。每个组件实例都有一个Watcher实例,当组件渲染时,它会访问所有响应式数据,触发getter,并将自己添加到对应的Dep中。

5、发布-订阅模式: Vue使用发布-订阅模式来建立数据和视图之间的联系,当响应式数据发生变化时,setter会通知相关的Dep,然后Dep会通知所有注册过的Watcher,告诉它们数据发生了变化,需要执行更新。

6、虚拟DOM: 为了提高性能,Vue引入了虚拟DOM。当数据变化时,Vue首先将变化记录在虚拟DOM中,然后通过对比新旧虚拟DOM,找出需要更新的部分,最终只更新真实DOM中变化的部分,而不是整个DOM树。

总体而言,Vue的响应式原理通过Object.defineProperty、依赖追踪、发布-订阅模式以及虚拟DOM等技术,实现了数据与视图之间的自动同步。这种机制让开发者可以专注于数据的变化和业务逻辑,而不用过多关注视图的更新。

相关推荐

  1. vue响应原理

    2024-01-24 14:28:02       37 阅读
  2. Vue3响应原理

    2024-01-24 14:28:02       42 阅读
  3. vue响应原理:依赖追踪

    2024-01-24 14:28:02       47 阅读
  4. Vue 3 中的响应原理

    2024-01-24 14:28:02       43 阅读
  5. Vue2源码】响应原理

    2024-01-24 14:28:02       23 阅读
  6. vue2和vue 3 的响应原理

    2024-01-24 14:28:02       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-24 14:28:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-24 14:28:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-24 14:28:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-24 14:28:02       20 阅读

热门阅读

  1. 数组对象,名字相同的对象进行合并

    2024-01-24 14:28:02       32 阅读
  2. 设计模式-桥接模式

    2024-01-24 14:28:02       34 阅读
  3. SpringBoot 整合redis

    2024-01-24 14:28:02       35 阅读
  4. 回顾一下容易被忽视golang基础的面试考察点

    2024-01-24 14:28:02       38 阅读
  5. 【Effective C++】4. 设计与声明

    2024-01-24 14:28:02       39 阅读
  6. Day24_216组合总数_17电话号码的字母组合

    2024-01-24 14:28:02       40 阅读
  7. Linux软件包管理器yum

    2024-01-24 14:28:02       35 阅读
  8. OpenGL渲染中使用EGL创建上下文

    2024-01-24 14:28:02       35 阅读
  9. 李沐深度学习-多层感知机从零开始

    2024-01-24 14:28:02       35 阅读
  10. 人工智能(Artificial Intelligence,简称AI)

    2024-01-24 14:28:02       29 阅读