vue中组件渲染过程

文章类型:Vue

发布者:hp

发布时间:2023-05-19

在项目开发过程中,经常使用组件,整理一下组件渲染过程

一:生命周期

1:创建阶段:

beforeCreate:在实例初始化之后、数据观测 (data observation) 和事件配置之前被调用,组件的数据和方法还未初始化,无法访问组件的属性和方法。

created:在实例创建完成后被调用。组件的数据和方法已经初始化,可以访问组件的属性和方法。。

2:模板编译和挂载阶段:

beforeMount:在挂载开始之前被调用。将编译模板准备将组件渲染到真实的 DOM 中。

mounted:在挂载完成后被调用。组件已经被渲染到页面上可以访问组件的真实 DOM。

3:更新阶段:

beforeUpdate:在数据更新之前被调用。组件尚未重新渲染,数据已经发生了变化。

updated:在数据更新完成后被调用。组件已经完成重新渲染,并且可以访问更新后的 DOM。

4:销毁阶段:

beforeDestroy:在实例销毁之前被调用。组件实例仍然完全可用。

destroyed:在实例销毁之后被调用。组件实例及其相关的 DOM 已经被完全销毁,无法再访问组件的属性和方法

二:初次渲染时

  1. 解析模板:组件通常使用模板来描述其结构和样式。首先会解析组件的模板(render函数),将其转换为虚拟 DOM 树。
  2. 创建虚拟 DOM:根据解析得到的模板, 创建一个虚拟 DOM 树,轻量级的 JavaScript 对象,表示组件的结构和内容。
  3. 数据响应式:组件的数据驱动特性意味着组件中的数据可以响应变化。 会在渲染过程中建立数据与虚拟 DOM 的关联,当数据发生变化时, 会自动更新相关的虚拟 DOM 节点。
  4. Diff 算法:在更新虚拟 DOM 之前,会使用 Diff 算法对新旧虚拟 DOM 进行比较,以找到需要更新的部分。会尽量复用已存在的 DOM 节点,减少真实 DOM 操作,提高性能。
  5. 更新虚拟 DOM:根据 Diff 算法的结果, 会根据需要更新虚拟 DOM 树中的节点。
  6. 生成真实 DOM:更新虚拟 DOM 后,会根据最新的虚拟 DOM 树生成真实的 DOM 树。
  7. 渲染到页面:将生成的真实 DOM 树渲染到页面中的指定位置,将组件内容呈现给用户。

三:更新渲染时

1:调用 beforeUpdate 钩子函数:在组件更新之前,首先调用。

2:执行 Diff 算法:通过比较新旧虚拟 DOM 树来确定哪些部分需要更新。

3:更新虚拟 DOM:根据 比较结果,会更新虚拟 DOM 树中的相应节点。

4:执行组件的 updated 钩子函数:在完成虚拟 DOM 的更新后,调用组件的 updated 钩子函数。

5:更新真实 DOM:根据更新后的虚拟 DOM 树,生成并更新真实的 DOM 树。

四:总结

1:通过虚拟 DOM 和 Diff 算法的配合,能够高效地更新页面内容,并减少对真实 DOM 的操作,提高性能和用户体验

2:生命周期钩子函数为开发者提供了更多的灵活性,可以在渲染过程的不同阶段执行自定义逻辑