vue2.0响应式编程实例分析

本文主要介绍"vue2.0响应式编程实例分析",希望能够解决您遇到有关问题,下面我们一起来看这篇 "vue2.0响应式编程实例分析" 文章。

vue2.0 使用了 Object.defineProterty 将data中的属性遍历并转化为getter 和 setter, 并且在getter中将使用数据的上下文进行一次收集,我们称之为依赖收集。

而在setter中就会触发依赖更新的操作,让在模板中可能会有多处随该依赖变化,所以我们将所有地方都收集起来,等待更新的时候进行一次批量操作。

下面是demo演示

(function () {

  let x;

  let y;

  let f = n => n * 100 + 200;

  let active;

  let onXChanged = function (cb) {

    active = cb;

    active();

    active = null;

  }

  // 收集更多依赖

  class Dep {

    // 依赖收集,将响应依赖添加到deps中

    constructor() {

      this.deps = new Set();

    }

    depend() {

      if (active) {

        this.deps.add(active)

      }

    }

    // 对当前deps中依赖一次执行

    notify() {

      this.deps.forEach(dep => dep())

    }

  }

  let ref = initValue => {

    let value = initValue;

    let dep = new Dep();

    return Object.defineProperty({}, "value", {

      get() {

        dep.depend();

        return value;

      },

      set(newValue) {

        value = newValue;

        dep.notify()

      }

    })

  }

  x = ref(1);

  onXChanged(() => {

    y = f(x.value);

    console.log(y);

  });

  x.value = 2;

  x.value = 3;

})()

关于 "vue2.0响应式编程实例分析" 就介绍到这。希望大家多多支持编程宝库

Vue3.0 API中如何使用isProxy和isReactive:本文主要介绍"Vue3.0 API中怎么使用isProxy和isReactive",希望能够解决您遇到有关问题,下面我们一起来看这篇 "Vue3.0 API中怎么使用isP ...