编写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 相关文章推荐
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 06 Javascript
JavaScript的Module模式编程深入分析
Aug 13 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
Jan 12 Javascript
AngularJS基础 ng-switch 指令简单示例
Aug 03 Javascript
JavaScript中常用的验证reg
Oct 13 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
Oct 13 Javascript
浅谈js for循环输出i为同一值的问题
Mar 01 Javascript
koa2实现登录注册功能的示例代码
Dec 03 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
Oct 31 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
Mar 03 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
Jun 17 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
Sep 02 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分页显示制作详细讲解
2006/12/05 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
php生成扇形比例图实例
2013/11/06 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
9个比较实用的php代码片段
2016/03/15 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
简单的三步vuex入门
2018/05/20 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
javascript实现固定侧边栏
2021/02/09 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python转换摩斯密码示例
2014/02/16 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
pycharm新建一个python工程步骤
2019/07/16 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
如何进行Linux分区优化
2016/09/13 面试题
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
通用员工手册范本
2015/05/14 职场文书