vue响应式的原理

要点

  • observe() 方法: 使用 defineReactive() 劫持所有数据

    • defineReactive() 就是对 Object.defineProperty() 的封装

  • Dep: 收集依赖 / 通知依赖数据更新了

    • 收集依赖用的是 dep.depend()

    • 通知依赖用的是 dep.notify()

  • Watcher: 更新渲染视图

举个例子

  • Vue 响应式的原理是什么?

    • 响应式的原理分为大概五个阶段, 首先数据初始化会进行数据劫持, 挂载阶段会进行依赖收集, 修改数据会进入到更新阶段, 要通知 Watcher 更新视图, 最后进行 DIFF 对比, 下面我给您详细介绍一下五个阶段分别做了哪些事情:

      • 数据初始化阶段new Vue() 的时候会执行 observe() 方法, 对所有的数据 (data / props) 进行劫持, 原理用的就是 defineReactive() 方法, 这个方法就是对 Object.defineProperty() 的封装

      • 挂载阶段时, 会创建一个 Watcher 将虚拟 DOM 渲染成真实 DOM, 而渲染的过程一定会进行模板解析, 就会访问到数据

      • 只要访问到数据, 就会触发数据的 get 方法, 此时调用 dep.depend()进行依赖收集, 所谓的依赖收集就是记录一下哪些 Watcher 用了我这个数据, 这个收集的最小单位是组件, 而 Vue1.x 最小单位是 DOM 元素

      • 只要数据发生变化, 就会触发数据的 set 方法, 此时调用 dep.notify()进行通知更新, 通知所有的 Watcher 进行 UI 渲染

      • 此时 Watcher 就会执行 render() 进行虚拟 DOM 构建, 调用 patch() 方法进行 DIFF 对比更新

      • 注意: DIFF 算法是一边比较一边更新页面, 不是比较完后一起更新

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值