Skip to content

v-if & v-show

在 Vue.js 中,v-ifv-show 都是用来控制元素的显示和隐藏的指令,但它们的工作方式有所不同。

v-if 指令

v-if 是一种“真实”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

注意,v-if 是惰性的,如果初始条件为假,那么什么也不会渲染;只有当条件第一次变为真时,Vue 才会开始渲染对应的元素。并且,只有当 v-if 的条件为真时,其中的元素/组件才会被渲染到 DOM 中,并且它们的生命周期也会被正常触发。当条件变为假时,这些元素/组件会被销毁并从 DOM 中移除。

html
<div v-if="show">Hello, Vue.js!</div>

在这个例子中,只有当 show 的值为 true 时,<div> 元素才会出现在 DOM 中。

v-show 指令

相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

v-show 不管初始条件是否为真,元素始终会被渲染,并且只是通过 CSS 的 display 属性来控制显示和隐藏。也就是说,使用 v-show 的元素/组件始终会被渲染到 DOM 中,不管 v-show 的条件是否为真,它们的生命周期也始终会被正常触发。

html
<div v-show="show">Hello, Vue.js!</div>

在这个例子中,无论 show 的值为何,<div> 元素始终会出现在 DOM 中,但只有当 show 的值为 true 时,它才会被显示出来。

v-if vs v-show

总的来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,v-show 会更好,如果在运行时条件很少改变,v-if 会更好。