Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
webVueBlog opened this issue Apr 1, 2020 · 3 comments
Open

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

webVueBlog opened this issue Apr 1, 2020 · 3 comments
Labels
vue vue

Comments

@webVueBlog
Copy link
Member

[vue]

@webVueBlog webVueBlog added the vue vue label Apr 1, 2020
@webVueBlog
Copy link
Member Author

webVueBlog commented Apr 1, 2020

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
Copy link
Member Author

webVueBlog commented Apr 1, 2020

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

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

@webVueBlog
Copy link
Member Author

webVueBlog commented Apr 1, 2020

我来解释: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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
vue vue
Projects
None yet
Development

No branches or pull requests

1 participant