美文网首页
Vue响应式系统基本原理

Vue响应式系统基本原理

作者: silvacheng | 来源:发表于2018-04-27 16:08 被阅读0次

Vue.js 是一款 MVVM 框架,数据模型仅仅是普通的 JavaScript 对象,但是对这些对象进行操作时,却能影响对应视图,它的核心实现就是「响应式系统」。

首先我们定义一个cb函数,这个函数用来模拟视图更新,调用它即代表更新视图。

  function cb (newVal) {
    console.log('视图更新了 ==> '   + newVal);
  }

然后我们定义一个defineReactive,这个方法通过Object.defineProperty来实现对对像的响应式话, 入参是一个obj(需要绑定的对象)、key(obj的某一个属性),val(具体的值)。经过defineReactive处理以后,我们obj的key属性在读的时候会触发reactiveGetter方法,而在该属性被写的时候则会触发reactiveSetter方法。

function defineReactive (obj, key, val) {
  Object.defineProperty(obj, key, {
      enumerable: true,
      configurable: true,
      get: function reactiveGetter () {
          return val;
      },
      set: function reactiveSetter (newVal) {
            if (newVal === val) {
                return;
            }
            cb(newVal);
      }
  });
}

当然这是不够的,我们需要在上面再封装一层observer。这个函数传入一个value(需要响应式的对象),通过遍历所有属性的方式对该对象的每一个属性都通过defineReactive处理。

function observer (value) {
  if (!value || !(typeof value !== 'object')) {
      return;
  }
  Object.keys(value).forEach((key) => {
      defineReactive(value, key, value[key]);
  });
}

最后,封装一个Vue

class  Vue {
    constructor (options) {
        this._data = options.data;
        observer(this._data);
    }
}

这样我们只要new一个Vue对象,就会将data中的数据进行响应式化。我们对data的属性进行下面的操作,就会触发cb方法更新视图。

let o = new Vue({
    data: {
        test: 'I am test~' 
    }
});

o._data.test = 'Hello,world~';

相关文章

  • Vue原理学习(二)

    响应式系统的基本原理 Vue基于Object.defineProperty来实现响应式,对于Object.defi...

  • Vue响应式基本原理

    Vue响应式系统基本原理 Object.defineProperty Object.defineProperty(...

  • 2.响应式系统的基本原理

    响应式系统的基本原理 响应式系统 Vue.js 是一款 MVVM 框架,数据模型仅仅是普通的 JavaScript...

  • 02.响应式系统的基本原理

    响应式系统的基本原理 响应式系统 Vue.js 是一款 MVVM 框架,数据模型仅仅是普通的 JavaScript...

  • vue 3.0 笔记

    vue 3.0 笔记 1、Vue 3.0 如何做到性能提升 响应式系统升级使用 Proxy 对象重写响应式系统:v...

  • Vue的34道题

    1、如何理解MVVM原理? MVVM的实现原理 2、响应式数据的原理是什么? 响应式数据与数据依赖基本原理vue双...

  • Vue响应式系统基本原理

    Vue.js 是一款 MVVM 框架,数据模型仅仅是普通的 JavaScript 对象,但是对这些对象进行操作时,...

  • 【浅谈Vue3 effect】

    Vue3 中引入了 proxy进行数据劫持,而effect是响应式系统的核心,而响应式系统又是 vue3 中的核心...

  • Vue3新特性笔记

    vue3.0的主要变化 响应式基本原理:Object.defineProperty -> Proxy,提高性能 初...

  • 前端面试题【Day02】

    本篇绪论 1,Vue响应式原理 1,Vue响应式原理 在vue实例中声明的数据就是响应式的。响应式:数据发生改变,...

网友评论

      本文标题:Vue响应式系统基本原理

      本文链接:https://www.haomeiwen.com/subject/dnyjlftx.html