vue的创建和渲染流程-简略

92 阅读2分钟

Vue.js 的依赖收集是其响应式系统的核心机制之一。以下是Vue.js组件的整个创建和渲染流程,以及依赖收集是如何融入其中的:

  1. 初始化

    • 当创建一个新的Vue实例时,Vue首先会初始化组件的选项,包括数据对象 data、计算属性 computed、方法 methods、监听器 watch、生命周期钩子等。
  2. 响应式系统构建

    • Vue使用Object.defineProperty(Vue 2.x)或Proxy(Vue 3.x)来劫持组件数据对象 data 中的属性,使它们变成响应式属性。
  3. 依赖收集

    • 对于 computed 属性,Vue会遍历它们并为每个属性创建一个依赖收集器(Dep)实例。依赖收集器负责管理该属性的依赖关系。
  4. 渲染组件

    • Vue使用虚拟DOM来提高性能。在组件的渲染过程中,会访问依赖于响应式数据的 computed 属性和数据,这些访问操作会触发以下响应式系统的行为:

      • 响应式属性被访问时,Vue会记录这个属性的依赖关系,即将当前的依赖收集器(Dep)与访问者(通常是组件的渲染函数)关联起来。
  5. 更新依赖

    • 当响应式属性的值发生变化时,相关的setter会被触发,通知所有依赖于这个属性的依赖收集器。
  6. 通知订阅者

    • 依赖收集器接收到setter的通知后,会遍历其订阅者列表(即依赖于该属性的渲染函数),并触发它们的更新。
  7. 重新渲染组件

    • 订阅者(如组件的渲染函数)接收到更新通知后,会重新执行以响应状态的变化,这可能导致组件的重新渲染。
  8. 虚拟DOM更新

    • Vue会比较新旧虚拟DOM树的差异(diffing算法),计算出最小的更新操作。
  9. 实际DOM更新

    • Vue将计算出的更新操作应用到实际DOM上,完成界面的更新。
  10. 生命周期钩子调用

    • 在组件的不同阶段,Vue会调用相应的生命周期钩子,如 mountedupdated 等。
  11. 用户交互

    • 用户与组件交互(如点击按钮),可能会触发事件处理器,Vue会响应这些事件,可能再次触发依赖收集和组件更新。

在整个流程中,依赖收集确保了只有当相关数据发生变化时,依赖于这些数据的组件才会重新渲染,这是Vue高效更新DOM的关键。通过这种方式,Vue实现了声明式和响应式的编程范式。