您好,登录后才能下订单哦!
这篇文章主要讲解了“编写Vue v-for循环的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“编写Vue v-for循环的方式有哪些”吧!
这在碰到诸如以下情况时特别好用:
渲染数组或列表
遍历对象属性
在Vue中v-for循环最基本的用法是这样的:
<ul> <li v-for='product in products'> {{ product.name }} </li> </ul>
但是,在本文中,我们将介绍一些超棒的方法,可以使你的v-for
代码更加精确、可预测和高效。
让我们开始吧。
首先,我们讨论的是大多数Vue
开发人员已经知道的常见最佳实践——在v-for循环中使用:key。通过设置唯一的键属性,可以确保组件按期望的方式工作。
如果我们不使用:key
,Vue将使DOM尽可能高效。这可能会导致v-for
元素出现乱序或其他不可预测的行为。
如果我们对每个元素都有唯一的键引用,那么就可以更好地预测如何操纵DOM。
<ul> <li v-for='product in products' :key='product._id' > {{ product.name }} </li> </ul>
虽然大多数时候v-for
用于循环数组或对象,但也有我们只想迭代特定次数的情况。
例如,假设我们正在为在线商店创建分页系统,并且我们只想每页显示10个产品。使用变量来跟踪当前页码,就可以像这样处理分页。
<ul> <li v-for='index in 10' :key='index'> {{ products[page * 10 + index] }} </li> </ul>
一个超常见的错误是使用v-if来过滤v-for
循环的数据。
虽然看上去直观了,但这会导致一个巨大的性能问题——VueJS
将优先v-for于v-if指令。
这意味着组件将遍历每个元素,然后再检查v-if
条件以查看是否应该呈现。
如果你将v-if与v-for一起使用,无论条件是什么,都将遍历数组的每一项。
// 不好的做法! <ul> <li v-for='product in products' :key='product._id' v-if='product.onSale' > {{ product.name }} </li> </ul>
那么问题是什么?
假设products
数组有数千个项,但想要渲染的只有3个在售产品。
每次重新渲染时,即使出售的3种产品根本没有改变,Vue也必须遍历这数千个项。
必须尽量避免结合使用v-if与v-for
的情况。
接下来介绍两个替代方法。
为了避免上述问题,我们应该在模板中进行迭代之前过滤数据。有两种非常相似的方法可以做到:
使用computed
属性
使用过滤方法
随你选择,下面让我们快速介绍这两个方法。
首先,我们只需要设置一个computed
属性。为了获得与之前的v-if相同的功能,代码看起来像这样。
<template> <ul> <li v-for="products in productsOnSale" :key="product._id"> {{ product.name }} </li> </ul> </template> <script> export default { data () { return { products: [] } }, computed: { productsOnSale: function () { return this.products.filter(product => product.onSale) } } } </script>
这样的好处是:
数据属性只会在依赖项发生变化时重新评估
模板只遍历在售的产品,而不是每一个产品
使用过滤方法的代码几乎相同,但使用方法会改变访问模板内值的方式。但是,如果我们希望能够将变量传递给过滤过程,那么就应该选择方法这条路。
<template> <ul> <li v-for="products in productsOnSale(50))" :key="product._id"> {{ product.name }} </li> </ul> </template> <script> export default { data () { return { products: [] } }, methods: { productsOnSale (maxPrice) { return this.products.filter(product => product.onSale && product.price < maxPrice) } } } </script>
在决定是否完全渲染列表时,你可能还是想要将v-for
与v-if
结合起来。
例如,如果我们只想在用户登录时呈现产品列表怎么办。
错误代码:
<ul> <li v-for='product in products' :key='product._id' v-if='isLoggedIn' <!-- HERE --> > {{ product.name }} </li> </ul>
这有什么问题?
和之前一样。Vue
模板会优先考虑v-for
——所以会遍历每个元素并检查v-if
。
即使最后什么都不渲染,也会循环数千个元素。
对于此示例,有一个简单的解决方案是移动v-if语句。
更好的代码!
<ul v-if='isLoggedIn'> <!-- Much better --> <li v-for='product in products' :key='product._id' > {{ product.name }} </li> </ul>
这要好得多,因为如果isLoggedIn
为false
——那就根本不需要迭代。
除了遍历数组并访问每个元素之外,我们还可以跟踪每个项目的索引。
为此,我们需要在项目之后添加一个索引值。这样做超级简单,但对于分页、显示列表索引、显示排名等都很有用。
<ul> <li v-for='(products, index) in products' :key='product._id' > Product #{{ index }}: {{ product.name }} </li> </ul>
到目前为止,我们只研究了使用v-for
来遍历数组。但是我们也可以很轻松地学会迭代对象的键值对。
与访问元素的索引类似,我们需要向循环中添加另一个值。如果我们使用单个参数循环对象,我们将循环所有项。
如果我们添加另一个参数,则将获得项和键。如果我们添加第三个参数,则还可以访问v-for循环的索引。
假设我们想遍历产品中的每个属性。那么代码如下:
<ul> <li v-for='(products, index) in products' :key='product._id' > <span v-for='(item, key, index) in product' :key='key'> {{ item }} </span> </li> </ul>
感谢各位的阅读,以上就是“编写Vue v-for循环的方式有哪些”的内容了,经过本文的学习后,相信大家对编写Vue v-for循环的方式有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。