v-if
和 v-show
是 Vue.js 中用于条件渲染的两种指令,它们的主要区别在于如何控制 DOM 元素的存在和可见性。
-
v-if:
v-if
指令会根据其表达式的值的真假,来添加或删除 DOM 元素。- 如果
v-if
的表达式返回true
,那么元素就会被插入到 DOM 中。如果表达式返回false
,那么元素就会被从 DOM 中移除。 v-if
是“惰性”的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。v-if
有更高的切换开销,因为每次都需要确保条件块内的事件监听器和子组件适当地被销毁和重建。v-if
是真正的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
-
v-show:
v-show
指令会根据表达式值的真假,来切换元素的display
CSS 属性。- 如果
v-show
的表达式返回true
,元素就会被显示(display
属性设置为block
)。如果表达式返回false
,元素就会被隐藏(display
属性设置为none
)。 v-show
指令的元素始终会被渲染,并且只是简单地基于 CSS 进行切换。v-show
有更低的切换开销,因为在切换时不会发生 DOM 的插入或删除操作,只是简单地切换 CSS 的display
属性。
总结:
v-if
是“真实”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。v-show
就简单得多——不论初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
如果需要非常频繁地切换条件,则使用 v-show
较好;如果在运行时条件很少改变,则使用 v-if
较好。