首页 > 其他分享 >Vue实战(09)-列表渲染:让你的页面秒变爆款!

Vue实战(09)-列表渲染:让你的页面秒变爆款!

时间:2023-06-18 18:35:07浏览次数:35  
标签:index Vue 渲染 text 09 爆款 item key

1 最基础的循环

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Vue中的列表渲染</title>
     <script src="../vue.js"></script>
 </head>
 <body>
 <div id="app">
     <div v-for="item of userInfo">
         {{item}}
     </div>
 </div>
 
 <script>
     var vm = new Vue({
         el: "#app",
         data: {
             userInfo: [
                 "Java",
                 "18",
                 "male",
                 "secret"
             ]
         }
     })
 </script>
 </body>
 </html>

效果:

Vue实战(09)-列表渲染:让你的页面秒变爆款!_Java

加上索引:

<div id="app">
 <!--    <div v-for="item of userInfo">-->
 <!--        {{item}}-->
 <!--    </div>-->
     <div v-for="(item, index) of userInfo">
         {{item}} --- {{index}}
     </div>
 </div>

效果:

Vue实战(09)-列表渲染:让你的页面秒变爆款!_Java_02

为了提升循环的性能,为每个项目加 key:

<div id="app">
     <div v-for="(item, index) of userInfo" :key="index">
         {{item}} --- {{index}}
     </div>
 </div>

不推荐使用 index 作为 key

在Vue中,key属性是用于标识每个节点的唯一性,以便在更新节点时进行高效的比较和渲染。使用索引作为key可能会导致性能问题和不必要的重新渲染。 当使用索引作为key时,如果在数组中插入或删除元素,则会导致索引发生变化,从而导致整个列表的重新渲染,这会影响性能。此外,使用索引作为key还可能导致在某些情况下出现错误的渲染结果。 因此,Vue官方不推荐将索引作为key。相反,建议使用具有唯一标识符的属性作为key,例如id、uuid等。这样可以确保key的唯一性,从而避免性能问题和渲染错误。

一般后端给前端传 list 值时,都有唯一 id:

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Vue中的列表渲染</title>
     <script src="../vue.js"></script>
 </head>
 <body>
 <div id="app">
     <div v-for="(item, index) of userInfo"
          :key="item.id">
         {{item.text}} --- {{index}}
     </div>
 </div>
 
 <script>
     var vm = new Vue({
         el: "#app",
         data: {
             userInfo: [{
                 id: "Java",
                 text: "18"
             },{
                 id: "Edge",
                 text: "19"
             },{
                 id: "公众号",
                 text: "20"
             }
             ]
         }
     })
 </script>
 </body>
 </html>

效果:

Vue实战(09)-列表渲染:让你的页面秒变爆款!_html_03

2 数组操作

不能直接在控制台使用list[4] = "xxx"这种利用下标新增元素,页面不会跟着渲染新增的元素的。

只能通过给的 API 操作:

Vue实战(09)-列表渲染:让你的页面秒变爆款!_Vue_04

API操作修改元素:

Vue实战(09)-列表渲染:让你的页面秒变爆款!_Java_05

3 多次循环

现在还想循环 span 标签:

<div id="app">
     <div v-for="(item, index) of userInfo"
          :key="item.id">
         {{item.text}} --- {{index}}
     </div>
     <span v-for="(item, index) of userInfo"
           :key="item.id">
         {{item.text}}
     </span>
 </div>

可这样循环两次,未免浪费性能啊!

最直观的,有人说外层再套一层,就实现了只循环一次:

<div id="app">
     <div v-for="(item, index) of userInfo"
          :key="item.id">
         <div>
             {{item.text}} --- {{index}}
         </div>
 
         <!-- 现在还想循环 span 标签 -->
         <span>
             {{item.text}}
         </span>
     </div>
 </div>

可就多了一个 div 标签呀,我强迫症啊,就不想多加一层标签元素。

<template v-for="(item, index) of userInfo"
      :key="item.id">
     <div>
         {{item.text}} --- {{index}}
     </div>
 
     <!-- 现在还想循环 span 标签 -->
     <span>
         {{item.text}}
     </span>
 </template>

你看,这样就不需要再加一层 div 了:

Vue实战(09)-列表渲染:让你的页面秒变爆款!_Java_06

4 对象循环

<!DOCTYPE html>
 <html lang="en">
 <head>
   <meta charset="UTF-8">
   <title>Vue中的列表渲染 - 对象循环</title>
   <script src="../vue.js"></script>
 </head>
 <body>
   <div id="app">
     <div v-for="(item, key, index) of userInfo">
       {{item}} --- {{key}} -- {{index}}
     </div>
   </div>
 
   <script>
     var vm = new Vue({
       el: "#app",
       data: {
         userInfo: {
           name: "Java",
           age: 28,
           gender: "小黑子",
           salary: "secret"
         }
       }
     })
   </script>
 </body>
 </html>

如何修改对象呢?userInfo是个引用,修改其引用指向内容即可:

Vue实战(09)-列表渲染:让你的页面秒变爆款!_Java_07


标签:index,Vue,渲染,text,09,爆款,item,key
From: https://blog.51cto.com/JavaEdge/6509136

相关文章

  • JavaScript-Vue
    2Vue2.1Vue概述通过我们学习的html+css+js已经能够开发美观的页面了,但是开发的效率还有待提高,那么如何提高呢?我们先来分析下页面的组成。一个完整的html页面包括了视图和数据,数据是通过请求从后台获取的,那么意味着我们需要将后台获取到的数据呈现到页面上,很明显,这就需要我们使......
  • SpringBoot:SpringWeb项目+Vue项目dist包整合成jar包
    接到需求做一个小功能项目,其中还要配备前端页面,并且将前端打包进后端jar包内,由jar包运行。项目结构将Vue打包之后的dist文件放到resouces资源路径下修改pom文件将下面的build配置替换掉pom中的build<build><finalName>自定义项目jar名称(可以用${project.artifatId})</finalNam......
  • vue 路由懒加载
    VUE路由的懒加载,官网是这样说明的:当打包构建应用时,JavaScript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就会更加高效。VueRouter支持开箱即用的动态导入,这意味着你可以用动态导入代替静态导......
  • 前端Vue加载中页面动画弹跳动画loading
    前端Vue加载中页面动画弹跳动画loading,下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13091效果图如下:使用方法<!--ref:唯一ref top:距离中间顶部距离--><cc-loadingref="mixLoad":top="0"></cc-loading>//隐藏动画this.$refs.mix......
  • 一文看完Vue3的渲染过程
    Vue3官网中有下面这样一张图,基本展现出了Vue3的渲染原理:本文会从源码角度来草率的看一下Vue3的运行全流程,旨在加深对上图的理解,从下面这个很简单的使用示例开始:import{createApp,ref}from"vue";createApp({template:`<divclass="card"><butt......
  • 关于uni-app与vue路由配置的不同,不使用uni.navigateTo接口跳转时,使用this.$router.pus
    之前用vue写router路由的时候,先配置一个路由表,然后再将配好的路由push到已有的组件里面,再通过<RouterView></RouterView>方法将每一个调用的路由的内容渲染到父组件要用的位置。今晚我在用uni-app的时候,突然不想用uni-app自己提供的路由跳转方法:uni.navigateTo我想用vue那种路由......
  • 前端Vue分享菜单按钮弹框、微博分享、QQ分享、微信好友、朋友圈
    前端Vue分享菜单按钮弹框、微博分享、QQ分享、微信好友、朋友圈 ,下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13085效果图如下:使用方法<!--分享ref:设置一个唯一refcontentHeight:弹框高度shareList:分享数组click:分享菜单按钮点击--......
  • vue学习笔记二
    四,vue中的AJAX比较了各种AJAX的方式,xhr,jQuery,fetch,综合考虑都不好,直接就G了,xhr学过,fetch了解过,jQuery听说过,结果最后表示要用axios。。。点个海克斯“考前恶补”。1.配置代理<template> <div>  <button@click="getstudents">获取学生信息</button></div></template>​<......
  • P2161 [SHOI2009]会场预约 题解
    蒟蒻提供一种fhq-treap的做法,但是不如其他题解的快(也没有stl快,不开O21.8s),但是比较好想,扩展了fhq的模板,也算是为使用fhq提供一个新方法。首先,fhq-treap是什么,如果有同学不清楚,请点击学习(并非我的blog)那么,由于fhq树的分裂操作,使得我们可以很方便的取出我们想要的区间。那么,在......
  • 09. centos使用docker方式安装mysql
    一、创建宿主机物理路径新建/mydata/mysql/data、log和conf三个文件夹mkdir-p/mnt/mysql/logmkdir-p/mnt/mysql/datamkdir-p/mnt/mysql/config或者mkdir/mnt/mysql/{log,data,config}二、直接执行下面这个命令,即可创建成功mysql服务dockerrun-p3306:3306--na......