【Vue3 知识第五讲】条件渲染、列表渲染知识详解
文章目录
- 一、条件渲染
- 1.1 概述
- 1.2 演示代码
- 二、列表渲染
- 2.1 使用 指令 v-for 遍历数组
- 2.2 **使用 指令 v-for 遍历对象**
- 十、案例作业
- 十一、总结
在前端开发过程中,条件和循环是经常被用到的逻辑。vue中封装了自己的组件渲染指令,可以更加方便的帮助开发者快速完成页面的布局。从而使得开发这个将更多的经历放在业务逻辑开发上面。下面我们就来讲一下这相关的几个指令的应用。
一、条件渲染
1.1 概述
指令 v-if、v-else-if 、v-else
多个元素,通过条件判断动态的向DOM树内添加或者删除DOM元素,操作的是DOM结构
应用场景:渲染后变化比较少,建议使用 v-if
数字化管理平台
Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus
权限系统-商城
个人博客地址
指令 v-show
通过设置样式 display:none; 控制元素的隐藏和显示,此时元素已经渲染到页面,操作的是样式
应用场景:渲染后变化比较多,从性能优化的角度来讲建议使用 v-show
1.2 演示代码
<script setup>
import { ref } from "vue"
const score = 80;
const obj = {name: "Jack",age: 23
}
let flag = ref(true)
</script>
<template><div><!-- v-if、v-else-if、v-else 三个条件渲染指令,直接操作dom;使用场景:页面第一次渲染的时候根据条件渲染对应的dom,且对DOM操作频率很低的情况下使用 --><div v-if="score >= 90">学生成绩大于90,优秀</div><div v-else-if="score >= 80">学生成绩大于80,良好</div><div v-else-if="score >= 70">学生成绩大于70,中等</div><div v-else-if="score >= 60">学生成绩大于60,及格</div><div v-else>学生成绩小于60,不及格</div><!-- v-if 可以单独,多次的使用;但是v-else-if、v-else必须要结合v-if去使用 --><hr><hr><!-- v-show 操作的是样式,不管条件是否成立,都会操作dom --><div v-show="score >= 90">学生成绩大于90,优秀</div><div v-show="score >= 80 && score < 90">学生成绩大于80,良好</div><div v-show="score >= 70 && score < 80">学生成绩大于70,中等</div><div v-show="score >= 60 && score < 70">学生成绩大于60,及格</div><div v-show="score <= 60 && score < 60">学生成绩小于60,不及格</div><!-- v-show 是一个单独的指令,类似于 v-if 单独使用一样,每一个条件都是独立。 --><hr><hr><button @click="flag = !flag">切换</button><Transition><div class="box" v-show="flag"></div></Transition></div>
</template><style scoped>
.box {height: 300px;background-color: blue;
}/* 下面我们会解释这些 class 是做什么的 */
.v-enter-active,
.v-leave-active {transition: opacity 0.5s ease;
}.v-enter-from,
.v-leave-to {opacity: 0;
}
</style>
二、列表渲染
2.1 使用 指令 v-for 遍历数组
语法 v-for = " (item, index) in arr "
参数 item代表数组中的每一项 index 代表每一项所对应的索引
key的作用 为了高效更新虚拟DOM,帮助Vue快速区分不同元素,用 key 来给每个节点做唯一标识
<script setup>
import { ref, reactive } from 'vue'const arr = ["banana", "orange", "apple", "kiwi fruit", 'peal']const stuData = ref([{idCard: 1,name: "Jack",age: 23
}, {idCard: 2,name: "Lucy",age: 18
}, {idCard: 3,name: "David",age: 26
}])const addInfo = () => {console.log(stuData.value.length)stuData.value.push({idCard: stuData.value.length + 1,name:"luosi",age:23})
}
</script>
<template><!-- v-for 指令可以实现数组和对象的列表数据渲染 --><ul><li :key="index" v-for="item,index in arr">{{ item }} ~ {{ index }}</li><!-- <li>{{ arr[1] }}</li> --></ul><hr><button @click="addInfo">添加一个学生信息</button><ul><li :key="item.idCard" v-for="item of stuData">编号:{{ item.idCard }}姓名:{{ item.name }}年龄:{{ item.age }}</li></ul>
</template>
<style scoped></style>
2.2 使用 指令 v-for 遍历对象
语法 v-for = “( item, key, index) in obj”
参数 item代表对象中的每一项 key代表每一项对应的键名 index代表每一项对应的索引
<script setup>
import { ref, reactive } from 'vue'const obj = reactive({idCard: 1,name: "张三",age: 23,
})const addAttr = () => {console.log(obj)obj.sex = "男"
}
</script>
<template><ul><li :key="key" v-for="item,key in obj">{{ item }} ~ {{ key }}</li><!-- <li>{{ obj.age }}</li> --></ul><br><ul><li v-for="item, key of obj">{{ item }} ~ {{ key }}</li></ul><button @click.once="addAttr">增加属性</button>
</template>
<style scoped></style>
注:2.x 版本中在一个元素上同时使用 v-if 和 v-for 时,v-for 会优先作用。而3.x 版本中 v-if 总是优先于 v-for 生效。由于语法上存在歧义,建议避免在同一元素上同时使用两者。
十、案例作业
十一、总结
v-if指令 作为一个条件渲染,当他为true的时候才会渲染出当前的节点
v-for指令基于一个数组来渲染列表 ,v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组或者对象,而 item 则是被迭代的数组元素的别名 在v-for的时候都会被要求设置Key值,而且每一个Key值都是独一无二的。
但在使用两种类型的指令时需要注意:
- 永远不要把 v-if 和 v-for 同时用在一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断)
- 如果避免出现这种情况,则在外层嵌套 template (页面渲染不生成dom节点),再这一层进行 v-if 判断,然后再内部进行 v-for 循环
<template v-for="(item) in textValue"><div :key="item.text" v-if="item.show" >{{item.text}}</div>
</template>
且需要注意的是:两者混合使用,在vue2和vue3中的优先级是不同的。
相关文章:

【Vue3 知识第五讲】条件渲染、列表渲染知识详解
文章目录 一、条件渲染1.1 概述1.2 演示代码 二、列表渲染2.1 使用 指令 v-for 遍历数组2.2 **使用 指令 v-for 遍历对象** 十、案例作业十一、总结 在前端开发过程中,条件和循环是经常被用到的逻辑。vue中封装了自己的组件渲染指令,可以更加方便的帮助开…...
vite+vue3从0开始搭建一个后管项目【学习随记二】
创建项目安装插件可以去【学习随记一】看下 1.路由配置 **文件路径是router/index.ts** import { createRouter, createWebHistory } from vue-router import { UserStore, userMenu } from /pinia import routes from ./routes import MainRouter from ./MainRouterconst ro…...

Linux的内存理解
建议 Mysql机器 尽量不要硬swap,如果是ssd磁盘还好。Free命令 free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存 输出简介: Mem 行(第二行)是内存的使用情况。Swap 行(第三行)是交换空间的使用情况。total 列显示系统总的可用物理内存和交换…...

财务数据分析?奥威BI数据可视化工具很擅长
BI数据可视化工具通常是可以用户各行各业,用于不同主题的数据可视化分析,但面对财务数据分析这块难啃的骨头,能够好好地完成的,还真不多。接下来要介绍的这款BI数据可视化工具不仅拥有内存行列计算模型这样的智能财务指标计算功能…...

趣味微项目:玩转Python编程,轻松学习快乐成长!
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 在学习Python编程的旅程…...
总结安卓Preference使用过程中注意的问题
近期在做新项目中接触到了Preference,这是一种用户界面元素,用于存储和展示应用程序的各种设置和用户偏好。该控件几年前google就已经发布了只是一直没机会应用,其实用起来还是挺方便的,使用过程中遇到了几个问题在此记录下。 1、…...

Laf 中大猫谱:让每一只流浪猫都有家
猫谱简介 中大猫谱是一款辅助校园流浪猫救助的开源小程序项目,服务端使用 Laf 云开发。 猫谱主要功能包括:猫咪信息登记、照片分享、拍照识猫、公告和留言等。项目创立的初衷,是解决校园猫猫交流群里的一个常见问题:问猫猫是谁。…...
uniapp 使用mqtt 报错 socketTask onOpen is not a function
1. 报错的解决方法 在man.js文件添加这个 // #ifndef MP // 处理 wx.connectSocket promisify 兼容问题,强制返回 SocketTask uni.connectSocket (function(connectSocket) {return function(options) {console.log(options)options.success options.success ||…...

Docker部署RustDesk Server 设置开机自启
三、Docker安装 Docker官方和国内daocloud都提供了一键安装的脚本,使得Docker的安装更加便捷。 官方的一键安装方式: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 国内 daocloud一键安装命令: curl -sSL https://…...
ESLint如何在vue3项目中配置和使用
目录 问题描述: 配置: 注意: 问题描述: 在用vite创建vue3项目时已经选择了添加ESLint,创建完成后使用 pnpm install命令(或者npm i)安装了项目依赖之后,ESLint在项目中需要怎样配…...
Frida-hook:微信数据库的破解
Frida-hook:微信数据库的破解 Frida-hook:微信数据库的破解1. 准备条件2. 用frida获取key2.1 静态分析微信apk文件2.2 frida hook: 3. 用sqlcipher打开数据库: Frida-hook:微信数据库的破解 我们可以从root过的手机中,找到微信相关数据库&am…...

【Unity每日一记】WheelColider组件汽车游戏的关键
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:uni…...

项目-IM
tim-server tim-server启动类实现CommandLineRunner接口,重写run()方法 run()方法开启一个线程,创建zk持久父节点,创建临时顺序子节点,将netty-server信息写入 1.1 用户登录 1.2 gateway向认证授权中心请求token 1.3 从zookee…...

2023年口腔医疗行业研究报告
第一章 行业概况 1.1 定义 口腔医疗行业是以口腔医疗服务消费为基础,包含医疗及消费双重属性,是 为满足口腔及颌面部疾病的预防和诊疗、口腔美容等需求提供相关医疗服务的行业。 该行业的主要参与者包括口腔保健专业人员(如牙医、口腔外科…...

1Java:JDK是什么
1Java是介于编译型语言和解释型语言之间 编译型语言:c c先编译成机器码,再执行 解释型语言:pytn 解释器直接加载源码运行,但是运行效果低 Java是将代码编译成一张字节码,优点 针对不同平台编写虚拟机,不同平台的虚拟…...

使用 Amazon Lambda 进行无服务器计算:云架构中的一场革命
引言 十年前,无服务器架构还像是痴人说梦。不再如此了! 有了 Amazon Lambda,我们现在可以建构和运行应用程序而不需要考虑服务器。云供应商会无缝地处理所有服务器的供应、扩展和管理。我们只需要关注代码。 这为云部署带来了前所未有的敏捷性、自动化和优化。但是,要发挥它的…...
谨慎使用Lombok的@Builder注解
现在很多程序员都习惯使用Lombok来使代码更加 “简洁”。但是使用Lombok也会造成很多问题,尤其Builder 有个很大的坑,已经见过好几次由于使用Builder注解导致默认值失效的问题,如果测试时没有在意这个问题,就很容易引发线上问题。…...
leetcode455. 分发饼干 【贪心】
题目: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,…...

4V-28V Vin,6A同步降压DCDC变换器,集成3.3V和150mA LDO——SCT2361FPBR
SCT2361是一种高效率的同步降压型DC-DC变换器,集成3.3V和150mA LDO。输入电压范围为4V-28V,输出电压可调为0.6V,具有3mmx3mm的小QFN封装,可提供连续6A的输出电流。该器件将高、低压侧功率mosfet集成,使导通损耗降到最低…...
Linux中的scp指令
在Linux和Unix系统中,scp(Secure Copy Protocol)是一个用于通过SSH协议进行安全文件传输的命令行实用程序。与传统的cp(copy)命令不同,scp允许用户在不同的机器之间、或同一台机器的不同位置之间传输文件或…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...