常见问题

怎么实现 this._test 改变而不是 this._data.test 改变触发更新?

_proxy(options.data);

function _proxy (data) {
    const that = this;
    Object.keys(data).forEach(key => {
        Object.defineProperty(that, key, {
            configurable: true,
            enumerable: true,
            get: function proxyGetter () {
                return that._data[key];
            },
            set: function proxySetter (val) {
                that._data[key] = val;
            }
        })
    });
}

能不能将依赖收集中讲到的 dep.addSub(Dep.target) 改成 dep.addSub(new Watcher())呢?

实际上一个 Watcher 对象可能会在多个 Dep 中,并不是每次 addSub 都是一个新的 Watcher 对象,需依赖 Dep.target 进行收集(实际上 Dep.target 也是通过 Watcher 对象的 get 方法调用 pushTarget 将自身赋值给 Dep.target)。

核心: 数据驱动 组件化 响应式原理

  1. 准备工作: flow、目录结构、源码构建

  2. 数据驱动: 数据->dom创建完整流程

  3. 组件化: 组件创建、组件相关核心概念

  4. 响应式原理: 完整讲诉响应式实现原理

扩展: event、v-model、slot、keep-alive、transition

event & v-model: 事件 和v-model的实现原理 slot & keep-alive: 内置组件的实现原理 transition…: 过渡的实现原理

生态: vue-router vuex

官方路由实现原理 官方状态实现原理

最后更新于

这有帮助吗?