详解在Vue.js编写更好的v-for循环的6种技巧


Posted in Javascript onApril 14, 2020

在VueJS中,v-for循环是每个项目都会使用的东西,它允许您在模板代码中编写for循环。

在最基本的用法中,它们的用法如下。

<ul>
 <li v-for='product in products'>
  {{ product.name }}
 </li>
</ul>

但是,在本文中,我将介绍六种方法来使你的 v-for 代码更加精确,可预测和强大。

让我们开始吧。

1.始终在v-for循环中使用key

首先,我们将讨论大多数Vue开发人员已经知道的常见最佳做法——在 v-for 循环中使用 :key。通过设置一个惟一的键属性,它可以确保组件以您期望的方式工作。

果我们不使用key,Vue将尝试使DOM尽可能高效,这可能意味着 v-for 元素可能会出现乱序或其他不可预测的行为。如果我们对每个元素都有唯一的键引用,那么我们就可以更好地准确地预测DOM将如何操作。

<ul>
 <li 
  v-for='product in products'
  :key='product._id' 
 >
  {{ product.name }}
 </li>
</ul>

2.在一个范围内循环

尽管大多数情况下,v-for 用于遍历数组或对象,但在某些情况下,我们肯定只希望循环执行一定次数。
例如,假设我们正在为在线商店创建一个分页系统,而我们只希望每页显示10个产品。使用一个变量来跟踪当前的页码,我们可以像这样处理分页。

<ul>
 <li v-for='index in 10' :key='index'>
  {{ products[page * 10 + index] }}
 </li>
</ul>

3.不要在循环中使用v-if

一个超级常见的错误是使用 v-if 来过滤 v-for 循环的数据。尽管这看起来很直观,但它会导致一个巨大的性能问题——VueJS优先考虑 v-for 而不是 v-if 指令。

这意味着您的组件将循环遍历每个元素,然后检查 v-if 条件以确定是否应渲染。因此,实际上,无论条件是什么,您都将遍历数组的每个项目。

不要这样:

// BAD CODE!
<ul>
 <li 
  v-for='product in products' 
  :key='product._id' 
  v-if='product.price < 50'
 >
  {{ product.name }}
 </li>
</ul>

4.使用计算属性或方法代替

为避免上述问题,我们应该在遍历模板中的数据之前对其进行过滤。有两种非常相似的方法:

  • 使用计算属性
  • 使用过滤方法

让我们快速地介绍一下这两种方法。

首先,我们只需要设置一个计算属性,为了获得与之前的v-if相同的功能,代码应如下所示。

<ul>
 <li v-for='products in productsUnderFifty' :key='product._id' >
  {{ product.name }}
 </li>
</ul>

// ...
<script>
 export default {
  data () {
   return {
    products: []
   }
  },
  computed: {
   productsUnderFifty: function () {
    return this.products.filter(product => product.price < 50)
   }
  }
 }
</script>

下面的代码几乎相同,但是使用方法改变了我们访问模板中的值的方式,如果我们希望能够将变量传递给筛选器,那么方法是最好的选择。

<ul>
 <li v-for='products in productsUnderPrice(50)' :key='product._id' >
  {{ product.name }}
 </li>
</ul>

// ...

<script>
 export default {
  data () {
   return {
    products: []
   }
  },
  methods: {
   productsUnderPrice (price) {
    return this.products.filter(product => product.price < price)
   }
  }
 }
</script>

5.在循环中访问项目的索引

除了遍历数组和访问每个元素之外,我们还可以跟踪每个项的索引。

为此,我们必须在项目后添加一个索引值,它非常简单,可用于分页,显示列表索引,显示排名等。

<ul>
 <li v-for='(products, index) in products' :key='product._id' >
  Product #{{ index }}: {{ product.name }}
 </li>
</ul>

6.遍历一个对象

到目前为止,我们只真正看过使用 v-for 遍历数组,但是我们可以轻松地遍历对象的键值对。

与访问元素的索引类似,我们必须向循环中添加另一个值。如果我们用一个参数遍历一个对象,我们将遍历所有的项。
如果我们添加另一个参数,我们将获得items 和 key,如果添加第三个,我们还可以访问 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 指令的最佳做法。
你还有什么其他建议吗?

原文:https://learnvue.co/2020/02/6-techniques-to-write-better-vuejs-v-for-loops/?utm_source=rss&utm_medium=rss&utm_campaign=6-techniques-to-write-better-vuejs-v-for-loops
翻译:杜尼卜

到此这篇关于详解在Vue.js编写更好的v-for循环的6种技巧的文章就介绍到这了,更多相关Vue.js v-for循环内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JQuery魔力之$(&quot;tagName&quot;)与selector
Mar 05 Javascript
JS两种定义方式的区别、内部原理
Nov 21 Javascript
jquery插件之定时查询待处理任务数量
May 01 Javascript
详解JavaScript语法对{}处理的坑爹之处
Jun 05 Javascript
javascript限制文本框输入值类型的方法
May 07 Javascript
jQuery防止重复绑定事件的解决方法
May 14 Javascript
基于JavaScript实现随机颜色输入框
Dec 10 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
Aug 08 Javascript
js实现GIF动图分解成多帧图片上传
Oct 24 Javascript
JS实现骰子3D旋转效果
Oct 24 Javascript
微信小程序实现拨打电话功能的示例代码
Jun 28 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 Vue.js
编写一个javascript元循环求值器的方法
Apr 14 #Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
Apr 14 #Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
Apr 14 #Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
Apr 14 #Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 #Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
Apr 13 #Javascript
vue cli3适配所有端方案的实现
Apr 13 #Javascript
You might like
php smarty模版引擎中的缓存应用
2009/12/11 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php解决约瑟夫环示例
2014/04/09 PHP
php中return的用法实例分析
2015/02/28 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP邮箱验证示例教程
2016/06/01 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
js表单验证实例讲解
2016/03/31 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
python 中的列表解析和生成表达式
2011/03/10 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
和谐家庭演讲稿
2014/05/24 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
上班离岗检讨书
2014/09/10 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript