Skip to content

前言

Object 和 Array 的变化 侦测采用不同的处理方式。

什么是变化侦测

Vue.js 会自动通过状态生成 DOM,并将其输出到页面上显示出来,这个过程叫渲染。Vue.js 的渲染过程是声明式的,我们通过模板来描述状态与 DOM 之间的映射关系。通常,在运行时应用内部的状态会不断发生变化,此时需要不停地重新渲染这时如何确定状态中发生了什么变化?

如何追踪变化

手写 Object.defineProperty(手写双向数据绑定)

js
function defineReactive(data, key, val) {
  Object.defineProperty(data, key, {
    enumerable: true,
    configurable: true,
    get: function () {
      return val;
    },
    set: function (newVal) {
      if (val === newVal) {
        return;
      }
      val = newVal;
    },
  });
}

Object.defineProperty如何收集依赖

在getter中收集依赖,在setter中触发依赖。

Object.defineProperty依赖收集在哪里

依赖是谁

watcher!

什么是watcher

太抽象了这块