编写v-for循环的技巧汇总


Posted in Javascript onDecember 01, 2020

在 Vue.js 中,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 指令的最佳做法。

你还有什么其他建议吗?

以上就是编写更好的v-for循环的6种技巧的详细内容,更多关于v-for循环的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
Jun 14 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
js 实现的可折叠留言板(附源码下载)
Jul 01 Javascript
js数组与字符串的相互转换方法
Jul 09 Javascript
使用JavaScript和C#中获得referer
Nov 14 Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
May 24 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
Jul 13 Javascript
JS解决position:sticky的兼容性问题的方法
Oct 17 Javascript
vue-cli 如何打包上线的方法示例
May 08 Javascript
使用原生js编写一个简单的框选功能方法
May 13 Javascript
vue 点击其他区域关闭自定义div操作
Jul 17 Javascript
jquery实现拖拽添加元素功能
Dec 01 #jQuery
创建与框架无关的JavaScript插件
Dec 01 #Javascript
jQuery实现可以扩展的日历
Dec 01 #jQuery
如何使用gpu.js改善JavaScript的性能
Dec 01 #Javascript
jQuery实现容器间的元素拖拽功能
Dec 01 #jQuery
jQuery实现查看图片功能
Dec 01 #jQuery
vue实现表格合并功能
Dec 01 #Vue.js
You might like
PHP中str_replace函数使用小结
2008/10/11 PHP
PHP 文件扩展名 获取函数
2009/06/03 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
2012/07/31 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
python使用wxpython开发简单记事本的方法
2015/05/20 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
Python不同目录间进行模块调用的实现方法
2019/01/29 Python
详解Python3 pandas.merge用法
2019/09/05 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
思想汇报范文
2013/11/04 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
品牌推广策划方案
2014/05/28 职场文书
应聘护士求职信
2014/07/21 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL