在 Vue.js 中,隐藏页面上的某个元素通常有两种方式:使用 v-if 或 v-show。它们的作用都是控制元素的显隐,但实现机制和适用场景有所不同。

1、v-show

  • 实现方式
    无论条件真假,v-show 在首次渲染时都会编译对应元素并添加到 DOM 中。
    之后通过修改 display: none; 样式来控制显示与隐藏。

  • 特点

    • 初始渲染时会加载元素,因此初始渲染开销较高

    • 切换显隐仅涉及 CSS 样式修改,性能消耗极小,非常适合频繁切换的场景。

    • DOM 节点始终存在,只是不可见。

2、v-if

  • 实现方式
    通过动态向 DOM 树添加或删除元素来实现显隐:

    • 如果条件为 false,首次渲染时不会生成对应 DOM 元素。

    • 当条件变为 true 时,会进行局部编译并将元素插入到 DOM 中。

    • 当条件由 true 变为 false 时,会删除对应 DOM 节点。

  • 特点

    • 切换时需要进行 DOM 的增删操作,切换开销较大

    • 首次渲染时,如果条件不成立,不会有无用的 DOM 元素。

    • 适用于条件不经常变化的场景。

3、对比表

特性v-ifv-show
首次渲染条件不成立则不渲染无论条件真假都渲染
显隐切换方式动态添加 / 删除 DOM 节点切换 display: none 样式
切换性能消耗高(DOM 操作)低(样式切换)
初始渲染消耗低(按需渲染)高(一次性渲染全部)
适用场景条件不常变化需要频繁切换显隐
DOM 节点存在性条件为假时不存在始终存在