Vue 面试题 目录

Vue 中 v-if 和 v-show 指令的区别是什么?

推荐答案

在 Vue 中,v-ifv-show 都是用于条件渲染的指令,但它们的工作方式和使用场景有所不同。

  • v-ifv-if 是“真正”的条件渲染,它会根据表达式的值在 DOM 中添加或移除元素。如果表达式的值为 false,元素将不会被渲染到 DOM 中。v-if 是惰性的,如果初始条件为 false,则不会进行任何渲染,直到条件变为 true 时才会开始渲染。

  • v-showv-show 是通过 CSS 的 display 属性来控制元素的显示与隐藏。无论表达式的值如何,元素始终会被渲染到 DOM 中,只是通过 display: none 来隐藏元素。v-show 不支持 <template> 元素,也不支持 v-else

本题详细解读

v-if 的工作原理

v-if 指令会根据表达式的值来决定是否渲染元素。当表达式的值为 true 时,元素会被渲染到 DOM 中;当表达式的值为 false 时,元素会被从 DOM 中移除。这意味着 v-if 是“惰性”的,只有在条件为 true 时才会进行渲染。

在上面的例子中,如果 isVisibletrue,则 div 会被渲染到 DOM 中;如果 isVisiblefalse,则 div 不会被渲染。

v-show 的工作原理

v-show 指令则是通过 CSS 的 display 属性来控制元素的显示与隐藏。无论表达式的值如何,元素始终会被渲染到 DOM 中,只是通过 display: none 来隐藏元素。

在上面的例子中,无论 isVisible 的值是 true 还是 falsediv 都会被渲染到 DOM 中。如果 isVisiblefalse,则 div 的样式会被设置为 display: none,从而隐藏元素。

使用场景

  • v-if:适用于条件渲染的场景,尤其是当条件变化不频繁时。由于 v-if 是惰性的,它可以在条件为 false 时减少 DOM 的渲染负担,提升性能。

  • v-show:适用于需要频繁切换显示与隐藏的场景。由于 v-show 只是通过 CSS 控制元素的显示与隐藏,切换时不会涉及 DOM 的添加或移除,因此性能开销较小。

注意事项

  • v-if 可以与 v-elsev-else-if 配合使用,而 v-show 不支持这些指令。
  • v-show 不支持 <template> 元素,而 v-if 可以用于 <template> 元素。
  • 在初始渲染时,如果条件为 falsev-if 不会渲染元素,而 v-show 会渲染元素并隐藏。
纠错
反馈