详解在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 相关文章推荐
自适应图片大小的弹出窗口
Jul 27 Javascript
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
Nov 23 Javascript
Js 刷新框架页的代码
Apr 13 Javascript
jQuery仿gmail实现fixed布局的方法
May 27 Javascript
JS实现的多张图片轮流播放幻灯片效果
Jul 22 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
Oct 17 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
Nov 06 Javascript
Vue Echarts实现可视化世界地图代码实例
May 07 Javascript
JavaScript对象原型链原理详解
Feb 05 Javascript
JSONP 的原理、理解 与 实例分析
May 16 Javascript
JS sort排序详细使用方法示例解析
Sep 27 Javascript
基于react项目打包css引用路径错误解决方案
Oct 28 Javascript
编写一个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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
文秘专业毕业生就业推荐信
2013/11/08 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js