Vue中条件渲染和列表渲染什么意思,怎样做
Admin 2022-06-18 群英技术资讯 939 次浏览
很多朋友都对“Vue中条件渲染和列表渲染什么意思,怎样做”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧!什么是列表渲染呢?这个就是最常见的,比如说在页面上有很多个元素,很多的图片,像新闻网站一次加载20条,如果用手敲去写HTML,那样新闻网站的人就不用去干活了,每天就去敲HTML代码了,这里面就会有类似于我们C语言代码里面的for循环那样,有一个循环语句在这个地方,让我们把这个页面的元素构建出来生成出来,这就是列表渲染。1 v-if 和 v-show
都用来控制元素的显示和隐藏
v-if控制虚拟DOM树上元素的创建和销毁,Vue的响应系统会根据虚拟DOM树对实际DOM进行更新,从而间接控制实际DOM上元素的显隐
v-show通过给元素添加样式display:none来让元素隐藏
v-if是惰性的,如果初始渲染条件为false,什么都不做;只有条件为true,才会开始编译
v-show不管初始渲染条件如何,元素始终被编译并保留,之后根据条件通过CSS切换
如果频繁切换显示与隐藏,v-if会频繁创建、销毁元素,而v-show只是切换样式
故v-if的切换消耗更高
如果元素的显示隐藏在一开始就定下来不会再变了,使用v-if
如果元素需要频繁切换显隐,使用v-show
为什么不能把v-if和v-for同时用在同一个元素上?
当 Vue 处理指令的时候,v-for的优先级比v-if高,因此这个模板:
<ul>
<li v-for="item in list" v-if="item.isActive" :key="item.id">
{{item.name}}
</li>
</ul>
会经过如下运算:
this.list.map(function(item) {
if (item.isActive) {
return item.name
}
})
我们每次重新渲染的时候都要遍历整个列表,即使isActive为true的item很少,这会带来性能方面的极大浪费,因此两者不能同时用在同一个元素上
1、如果想控制整个列表的显隐,可以将v-if移动到容器元素上,比如:
<body>
<div id="example">
<ul v-if="listShow">
<li v-for="item in activeItems" :key="item.id">{{item.name}}</li>
</ul>
</div>
</body>
<script>
const vm = new Vue({
el: "#example",
data: {
list: [
{ id: 1, name: "路飞", isActive: true },
{ id: 2, name: "索隆", isActive: false },
{ id: 3, name: "山治", isActive: true },
],
listShow: false,
}
});
</script>
2、如果想过滤列表中的项目,可以使用计算属性(computed)返回过滤后的列表,比如:
<body>
<div id="example">
<ul>
<li v-for="item in activeItems" :key="item.id">{{item.name}}</li>
</ul>
</div>
</body>
<script>
const vm = new Vue({
el: "#example",
data: {
list: [
{ id: 1, name: "路飞", isActive: true },
{ id: 2, name: "索隆", isActive: false },
{ id: 3, name: "山治", isActive: true },
],
},
computed: {
activeItems: function () {
return this.list.filter((item) => item.isActive);
},
},
});
</script>
在使用v-for进行列表渲染时,必须给元素添加一个key属性,并且这个key必须是唯一标识
<ul>
<li v-for="item in list" :key="item.id">{{item.name}}</li>
</ul>
我们知道,Vue 在更新元素时,不会直接操作真实DOM(渲染真实DOM开销是很大的),而是根据新数据生成新的虚拟 DOM,然后对新旧虚拟DOM进行差异对比,根据对比结果进行DOM操作来更新视图
列表渲染时,如果有key属性,由于它是唯一标识,在对比两个新旧节点时若key不同也就没有深入对比的必要了。
为什么不能用index作为key?因为index是不稳定可变的,比如删除了列表第一个元素,会导致后面的元素index发生变化,从而导致key发生变化。这时,Vue 在对比新旧节点时,遇到key相同的节点,就会进行深入对比,发现节点内容发生了变化,就会去创建新的真实DOM用来替换原来的真实DOM。原本只需要删除真实DOM中第一个元素的操作,会变成新建、替换后续所有真实DOM,造成性能的极大浪费
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
React中高阶组件HOC怎样用?一些朋友可能对高阶组件HOC的使用不是很了解,因此这篇文章就给大家介绍一下高阶组件HOC,下文有示例代码供大家参考,感兴趣的朋友接下来跟随小编来学习一下吧。
Angular项目中怎么使用 SASS 样式?下面本篇文章给大家介绍一下Angular 中 SASS 样式的使用方法,希望对大家有所帮助!
本文我们来了解vuex中辅助函数mapGetters,mapGetters辅助函数的作用就仅是将 store 中的 getter 映射到局部计算属性,那么mapGetters用法是什么呢?接下来我们具体的了解看看。
node.js导致进程退出是什么原因?NodeJS进程推出的因素通常是主动退出、未捕获的异常、未处理的 promise rejection、未处理的 Event Emitter error 事件和系统信号这三种,接下来我们详细了解看看。
let声明的范围是块作用域,var声明的范围是函数作用域。let和var的另一个重要区别是,let声明的变量不会在作用区域内得到改善。let声明前的执行瞬间称为暂时性死区。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008