【Vue】条件渲染&列表渲染来啦(上)

简介: 【Vue】条件渲染&列表渲染来啦

hello,我是小索奇哈,精心制作的Vue系列持续发放,涵盖大量的经验和示例,由浅入深进行讲解。 本章给大家讲解的是条件&列表渲染,前面的章节已经更新完毕,后面的章节持续输出,有任何问题都可以留言或私信哈,一起加油~

条件渲染

1. v-if

这个指令根据表达式的真假来决定是否渲染元素

例如:

<div v-if="show">
  只有在 show = true 时显示
</div>

2. v-else-if/v-else

v-else-if表示v-if的“else-if”条件,v-else表示最后的“else”条件

例如:

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B 
</div>
<div v-else>
  都不是
</div>

3. 用key管理可复用元素

让Vue通过key值识别元素,提高渲染效率

例如:

<div v-if="loginType === 'username'" key="username">
  username
</div>
<div v-else key="email">
  email
</div>

4. v-show

基于CSS显示/隐藏元素,只是切换display

例如:

<div v-show="ok">
  在 ok=true 时显示
</div>

如果要频繁的更改,使用v-show会更好点,因为它仅是切换隐藏显示,效率更高

v-if 和 v-show 在条件渲染时的选择判断如下

  1. 当需要完全切换显示/隐藏元素时,如用户权限控制,使用 v-if它会直接操作 DOM,完全销毁或重新渲染元素
  2. 当只需要简单切换元素的显示/隐藏,如一些弹窗、提示,使用 v-show它只是切换 CSS 的 display属性,开销更小
  3. 当元素较简单,渲染开销小时,两者差异不大如果元素较复杂,v-show 会略快一些
  4. 如果需要频繁切换,使用 v-show;如果在运行时不大可能改变,使用 v-if

简单总结一下:

  • 完全展示/隐藏用 v-if
  • 简单切换显示/隐藏用 v-show
  • 频繁切换用 v-show
  • 运行时不变用 v-if

template上的v-if

template元素是一个不可见的包装器,它可以容纳多个元素,但是它本身不会渲染到DOM中

常见的应用场景就是和v-if指令结合使用:

  • 把v-if加在<template>上,可以有条件地渲染<template>内部的多个元素
  • 而不需要像v-if直接加在单个元素上那样,重复写很多重复的v-if条件判断
  • <template>可以包含任意类型的元素,非常方便地组织元素块
  • 最终渲染结果不包含<template>元素,只包含其内部的元素

用户信息展示案例

<template v-if="user.loggedIn">
  <div>
    <!-- 用户信息 --> 
    <p>用户名:{{user.name}}</p>  
    <p>积分:{{user.points}}</p>
  </div>
  <div> 
    <!-- 用户菜单 -->
    <button>首页</button>
    <button>设置</button>
  </div>
</template>
<div v-else>
  <!-- 登录提示 -->
  <p>请登录后查看个人信息</p>
  <button>去登录</button>  
</div>

注意template只能和v-if使用,用v-show是不行的

列表渲染

v-for

用于基于数据多次渲染元素,通常用来渲染列表数据

<ul>
  <li v-for="item in list">
    {{ item }}
  </li>
</ul>

模板 v-for

和v-if一样,可以在<template>上使用v-for来渲染元素块

<template v-for="item in list">
  <div>{{item.name}}</div>
  <div>{{item.desc}}</div>
</template>

track-by

用来指定元素的唯一标识,提高渲染效率

<div v-for="item in list" :key="item.id"></div>

这里详解一下key

在Vue列表渲染时,就像一个todolist应用生成一长串的li元素当列表数据更新时,Vue需要知道具体哪个元素发生了变化,比如插入、删除、排序等

那么Vue如何识别每个元素的身份呢?这就是key的作用了

我们需要给每个元素添加一个独一无二的key值,来标识不同的元素:

<ul>
  <li v-for="item in list" :key="item.id">
    {{item.name}}
  </li>
</ul>

这里我们使用每个数据item的id作为keykey的要求是唯一的,比如item的id就很适合作为key

有了key,Vue就可以准确地知道哪个元素发生了变化,比如某个元素被删除了,Vue会找到对应key的元素并销毁

这样就实现了高效的列表渲染

所以简单来说,key的作用是作为元素的唯一标识,用于提高Vue列表渲染时的性能,底层会复用DOM节点需要注意key必须唯一,不要使用索引index作为key

注意

一定要写key!虽然说不写key也不报错,但不写可能导致以下内容

  • 列表重新渲染时,会直接创建新元素,而不是移动原有元素这会带来页面闪烁
  • 使用Transition过渡动画时,会无法正确获取元素状态
  • 丧失Vue内部对列表元素的身份识别能力,导致其他问题

这里仅列出以下几点,在react中不写key直接就会报错

当我们不写key的话,vue会自动把index索引作为key(下面介绍index)

  1. 直接通过索引修改数组,如 vm.items[0] = {},是非响应式的。应使用 Vue.set(vm.items, 0, {}) 或 vm.items.splice() 来修改数组。
相关文章
|
2天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。
|
1天前
|
JavaScript
如何在 Vue 中使用具名插槽
【10月更文挑战第25天】通过使用具名插槽,你可以更好地组织和定制组件的模板结构,使组件更具灵活性和可复用性。同时,具名插槽也有助于提高代码的可读性和可维护性。
7 2
|
1天前
|
JavaScript
Vue 中的插槽
【10月更文挑战第25天】插槽的使用可以大大提高组件的复用性和灵活性,使你能够根据具体需求在组件中插入不同的内容,同时保持组件的结构和样式的一致性。
7 2
|
1天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
2天前
|
缓存 JavaScript UED
Vue 中异步加载模块的方式
【10月更文挑战第23天】这些异步加载模块的方式各有特点和适用场景,可以根据项目的需求和架构选择合适的方法来实现模块的异步加载,以提高应用的性能和用户体验
|
3天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
5天前
|
JavaScript
Vue 指令速查表
【10月更文挑战第12天】Vue 指令速查表
|
3天前
|
缓存 JavaScript 搜索推荐
Vue SSR(服务端渲染)预渲染的工作原理
【10月更文挑战第23天】Vue SSR 预渲染通过一系列复杂的步骤和机制,实现了在服务器端生成静态 HTML 页面的目标。它为提升 Vue 应用的性能、SEO 效果以及用户体验提供了有力的支持。随着技术的不断发展,Vue SSR 预渲染技术也将不断完善和创新,以适应不断变化的互联网环境和用户需求。
20 9
|
2天前
|
JavaScript 前端开发 UED
vue 提高 tree shaking 的效果
【10月更文挑战第23天】提高 Vue 中 Tree shaking 的效果需要综合考虑多个因素,包括模块的导出和引用方式、打包工具配置、代码结构等。通过不断地优化和调整,可以最大限度地发挥 Tree shaking 的优势,为 Vue 项目带来更好的性能和用户体验。
|
6天前
|
JavaScript 前端开发 开发者
Vue 的优缺点
【10月更文挑战第16天】Vue 具有众多优点,使其成为前端开发中备受青睐的框架之一。尽管它也存在一些局限性,但通过合理的应用和技术选型,这些问题可以得到一定程度的解决。在实际项目中,开发者可以根据项目的需求和特点,权衡 Vue 的优缺点,选择最适合的技术方案。同时,随着 Vue 不断的发展和完善,相信它将在前端开发领域继续发挥重要作用。
13 6