weekCodeing / interview-answe

🌍 前端程序员训练 求星星 ✨ 各位同学可以在issues中提问,无论是实际项目中遇到的问题,或者是技术问题都可以, 大家一起解决💯 👍 😄。
http://www.dadaqianduan.cn/
76 stars 9 forks source link

151.[vue]v-if和v-show哪个优先级更高? #151

Open webVueBlog opened 4 years ago

webVueBlog commented 4 years ago

[vue]

webVueBlog commented 4 years ago

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

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

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

注意,v-show 不支持 <template>元素,也不支持 v-else。

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

  此外,当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for 循环中,所以不推荐同时使用v-if 和 v-for。

webVueBlog commented 4 years ago

v-if:根据表达式的值在DOM中生成或者移除一个元素,值是false就会在DOM中删除,反之会克隆相应元素到DOM中 支持加在<template>标签上

v-show是根据表达式的值来显示或者隐藏元素,根据的是display的值 不支持加在<template>标签上

webVueBlog commented 4 years ago

我来解释:if>show

v-if="true"   v-show="false"

v-if="false"   v-show="true"

不管那种,都为false,只要有false就不显示

上面两种if是用来判断得,如果为if为true,那么v-show就会出现并执行隐藏,元素还在只是不显示,是由if进行的初始化渲染,当if为false得时候,v-show不执行,在所在元素都不显示当前得标签,不进行初始化渲染。

当:

v-show="false" v-if="true"

v-show="true" v-if="false"  

当show在前,if在后时,也是判断if,v-show="false" v-if="true", 当前所使用的标签还在,有进行初始化渲染。在dom中可以找到。

当v-show="true" v-if="false" 也是判断if,此时if为false,所以当前标签没有被初始化渲染。

所以if>show