关于Vue中的v-if和v-show

86 阅读1分钟

看到了一个问题,随手记录一下。

Vue官网文档中提到,在Vue项目中使用v-if指令时,会根据"真假"值来决定是否渲染该组件或元素,而v-show是给组件或元素添加display属性来控制组件或者元素是否渲染。v-if没什么好说的,为false时不会生成该组件或者元素,这里我们来聊聊v-show。

上面提到的'是否渲染'感到有点疑惑,display:none是不会渲染当前DOM元素,而v-show却又说初始化就会渲染该元素,只是display设置之后不显示。于是CPU在这里烧了。

让我们看看MDN怎么说

Snipaste_2024-02-20_12-26-55.png

好吧,解释的比较笼统,"当前元素及其子元素不会被渲染"。

这里涉及到一个知识点就是页面的渲染流程。被问的比较多的一个面试题就是:在浏览器的地址栏输入url之后按下回车发生了什么?

DNS解析-->TCP连接-->发送请求-->解析HTML标签,生成DOM树-->解析CSS文件,生成样式树-->根据DOM树和样式树生成渲染树-->绘制页面-->执行javascript-->断开TCP连接

回到之前的问题,被设置了display:none的元素也会被加入到DOM树里面,但是在构建渲染树的时候会将该节点剔除掉,所以最后的结论就是,DOM树里面是有该(设置了display:none)元素的,但是渲染到页面就会隐藏。

欢迎指错补充