vue原理提炼【三分钟学会,拿去忽悠面试官】

385 阅读1分钟

最近学了些vue的原理课,想提炼一些比较重要的东西。把我看了两个半天的课,浓缩成3分钟。

vue响应式原理:

vue在初始化的时候,会深度遍历

 data(){ 
    retrun{ 
        obj:{
            a:1,
            b:2
        }
    } 
}

 里的所有对象,使用es5语法里的defineProperty  进行定义,这就是为什么vue不支持ie8,因为ie8没有实现defineProperty

defineProperty

object.defineProperty 可以为对象创造一个属性,并使其拥有get和set方法,在get和set方法中,实现了一系列的响应式操作。

但是注意,只会在初始化的时候做遍历,所以之后通过 obj.c =3 创建的子级 是无法实现响应式的。

必须通过官方提供的 this.$set(this.obj,'c',3), 来进行一次 defineProperty绑定。


vue diff算法:

vue会在每一个方法函数执行完成之后,进行一次数据比对(diff算法),寻找出其中差异,再进行相关响应。

<img v-if='obj.a==1'/>
<img v-else/>

...

methods: {    imageChange(){
          this.obj.a=2;
          this.obj.a=1;
    }
}

在imageChange的执行过程中,页面dom并不会进行响应,只有当该函数执行完成后,才会进行一次虚拟dom的diff比较,执行最终的响应。

这就是我们为什么要使用 $nextTick,因为他使当前的流程进入到了异步的状态,结束了上一个函数的生命周期,使diff开始工作。


工作中,vue新手最容易出现的问题:
  • 传参问题,即第一个defineProperty。
  • 生命周期,即第二个diff算法。


掌握了这两点,你就可以去忽悠那些对vue原理没有了解的面试官了!

ヾ(◍°∇°◍)ノ゙