概念


原理

Q1:Vue的scoped的原理是什么?

难度:⭐⭐⭐⭐

答案

Vue 的 scoped 样式原理主要是通过在编译阶段给每个标签生成唯一的哈希标识符,并将这个哈希标识符添加到样式类名中,以实现样式的局部作用域。这样,样式只会影响到具有相同哈希标识符的元素。

具体原理步骤如下:

  1. 生成唯一标识符: 在编译时,Vue 会给每个标签生成唯一的哈希标识符(通常是基于文件路径的哈希值)。
  2. 添加到样式类名: 将生成的唯一标识符添加到每个样式类名前缀,形成类似 .scoped-xxxxxx .your-class 的格式。
  3. 应用样式: 在渲染时,Vue 会动态地将这个唯一标识符附加到组件的根元素上,并使得样式只对具有相同唯一标识符的元素生效。

这样做的好处是,样式类名的唯一性确保了样式的局部性,不会污染全局样式。这对于组件化开发非常有用,防止了样式冲突的问题。

例如,如果原本的样式是这样的:

1
2
3
4
cssCopy code/* 全局样式 */
.your-class {
color: red;
}

经过 scoped 处理后,变成了:

1
2
3
4
cssCopy code/* 编译后的样式 */
.scoped-xxxxxx .your-class {
color: red;
}

这样,.your-class 样式只会影响到拥有相同哈希标识符的元素。这就是 Vue 的 scoped 样式的基本原理


Q2:虚拟dom渲染到页面的时候,框架会做哪些处理?

难度:⭐⭐

答案

当虚拟 DOM 渲染到页面时,框架通常会执行以下主要处理步骤:

  1. 比对更新
    • 框架会将虚拟 DOM 与上一次渲染的虚拟 DOM 进行比对,找出发生变化的部分。这一过程通常称为“虚拟 DOM 的 diff 操作”。
    • 比对的目的是找出需要更新的部分,以便最小化实际 DOM 的操作次数,提高渲染效率。
  2. 生成更新补丁
    • 比对完成后,框架会根据发生变化的部分生成更新补丁(patch)。
    • 更新补丁通常包含了需要对实际 DOM 进行的操作,比如新增节点、删除节点、修改节点属性等。
  3. 应用更新补丁
    • 框架会根据生成的更新补丁,按照一定的顺序依次对实际 DOM 进行操作。
    • 这些操作会被批量执行,以提高性能。
  4. 更新组件状态
    • 如果在渲染过程中需要更新组件的状态(比如状态驱动的框架中),框架会执行相应的状态更新操作。
    • 这可能会触发组件的重新渲染过程,从而形成一个渲染循环。
  5. 触发生命周期钩子
    • 在更新完成后,框架会触发相应的生命周期钩子,通知应用程序更新完成或者执行其他操作。
    • 这些生命周期钩子可以用于执行一些额外的逻辑,比如在更新完成后执行一些副作用操作。

总的来说,当虚拟 DOM 渲染到页面时,框架会通过比对更新、生成更新补丁、应用更新补丁等步骤来实现页面的渲染更新。这一过程通常是高效的,因为它尽量减少了对实际 DOM 的直接操作,从而提高了性能和渲染效率。


组件


状态管理


路由管理


指令


性能优化