VUE 双向绑定使⽤和原理及响应式原理

591 阅读2分钟

双向绑定原理

vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的

vue是如果进行数据劫持的?

  • vue2.0 采用的是Object.defineProperty进行数据劫持的
  • vue3.0 采用的是proxy

具体过程

(1):首先数据发生改变

(2):通过Object.defineProperty()截取; set()修改值、get() 获取值

(3):set方法有一个通知机制,只要你一修改,它马上就会通知watcher 监听器

(4):watcher 就会告知虚拟dom哪个节点发生了改变

(5):经过diff算法生成新的dom树。然后两个树进行比较,发现不一样的节点

(6):把新的节点更新到真实dom上。

总结:说的简单点-v-model原理其实就是给input事件绑定oninput事件 就会立刻调用底层对象对应的setter方法 改变data里的属性的值 从而实现双向数据绑定。

响应式原理

概念

所谓数据响应式就是:能够使数据被监测并对这种变化做出响应式的机制

MVVM框架要解决的就是连接数据层和视图层,这就是又回到了上面的具体过程了!

image.png

vue2中的数据响应式会根据数据类型来做不同处理

  • 如果是对象则采⽤Object.defineProperty()的⽅式定义数据拦截,当数据被访问或发⽣变化时,我们感知并作出响应;

  • 如果是数组则通过覆盖数组对象原型的7个'push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse')变更⽅法,使这些⽅法可以额外的做更新通知,从⽽作出响应。这种机制很好的解决了数据响应化的问题。

    • 但在实际使⽤中也存在⼀些缺点:⽐如初始化时的递归遍历会造成性能损失;

    • 新增或删除属性时需要⽤户使⽤Vue.set/delete这样特殊的api才能⽣效;