v-if 和 v-show 的区别
两个重点【dom】和【生命周期】
- v-if
- 惰性指令,false 不会被编译、渲染
- 不会存在 DOM 中
- 切换开销大,需要重新创建元素
- 值变化,使用 v-if 的组件生命周期执行顺序
true
变为false【组件的销毁】
- beforeDestroy / beforeUnmounted
- destroyed / unmounted
false
变为true 【执行全部生命周期函数】
- beforeCreate
- created
- beforeMount
- mounted
- beforeUpdate
- updated
- beforeDestroy / beforeUnmounted
- destroyed / unmounted
- v-show
- 非惰性,会被渲染
- 使用 display: none 控制
- 切换开销小
- 频繁切换选择 v-show
- 值变化,不会触发生命周期函数
v-if 和 v-for 为什么不能同时用,同时用的优先级如何
-
v-for
的时候,建议设置key
值,并且保证每个key
值是独一无二的,这便于diff
算法进行优化 - 在
Vue2
当中,v-for 的优先级更高- 同时用带来性能浪费
- 每次都会先循环,再进行条件判断
- 可以外层使用 template 加 v-if, 内层使用 v-for
- 在
Vue3
当中,则是 v-if 的优先级更高。- 先判断再循环
- 有无法取到 v-for 当中遍历的 item 的问题,参考