【Vue.js】条件渲染和列表渲染以及Vue中key值的内部原理

简介: 【Vue.js】条件渲染和列表渲染以及Vue中key值的内部原理

条件渲染


v-if


写法:


(1).v-if="表达式"


(2).v-else-if="表达式"


(3).v-else="表达式"


适用于:切换频率较低的场景。


特点:不展示的DOM元素直接被移除。


注意: v-if可以和:v-else-ifv-else一起使用,但要求结构不能被“打断”


实例:


// <!-- 使用v-if做条件渲染 if为true则把结构直接从页面上删除-->
 <h2 v-if="n==1">苏凉</h2>
 <h2 v-if="n==2">ming</h2>
 <h2 v-if="n==3">xiaohu</h2>
// <!-- v-else和v-else-if 中间不能断开-->
 <h3 v-if="n==0">点击按钮查看四大名著</h3>
 <h3 v-else-if="n==1">西游记</h3>
 <h3 v-else-if="n==2">水浒传</h3>
 <h3 v-else-if="n==3">三国演义</h3>
 <h3 v-else-if="n==4">红楼梦</h3>
 <h3 v-else>没有更多了...</h3>


v-if配合template标签来使用,template不显示在也买你中,可与v-if来使用控制一整个模块的显示和隐藏。


//<!-- template只能与v-if来配合使用 -->
<template v-if="n == 3">
    <h4>全部显示</h4>
    <h4>全部显示</h4>
    <h4>全部显示</h4>    
</template>


v-show


写法:


v-show="表达式"

适用于:切换频率较高的场景。


特点:不展示的DOM元素未被移除,仅仅是使用样式隐藏掉。


//  <!-- 使用v-show做条件渲染,相当添加了一个display=none -->
   <h2 v-show="n==1">苏凉</h2>
   <h2 v-show="n==2">ming</h2>
   <h2 v-show="n==3">xiaohu</h2>


备注:使用v-if的时候,元素可能无法获取到,而使用v-show一定可以获取到。


列表渲染


v-for指令


1.用于展示列表数据


2.语法:v-for="(item,index) in xxx" : key="yyy"


3.可遍历:数组、对象、字符串(用的很少)、指定次数(用的很少)


实例:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.8/dist/vue.js" type="text/javascript"></script>
</head>
<body>
    <div id="box">  
        <!-- 遍历数组 -->
        <h2>人员信息</h2>
        <ul>
            <li v-for="(p,index) in persons" :key="index">
                {{p.name}}-{{p.age}}
            </li>
        </ul>
        <!-- 遍历对象 -->
        <h2>汽车信息</h2>
        <ul>
            <li v-for="(value,key,index) in car" :key="index">
                {{index}}-{{key}}-{{value}}
            </li>
        </ul>
        <!-- 遍历字符串 -->
        <h2>test</h2>
        <ul>
            <li v-for="(value,index) in str" :key="index">
                {{index}}-{{value}}
            </li>
        </ul>
        <!-- 遍历指定数字 -->
        <h2>test1</h2>
        <ul>
            <li v-for="(value,index) in 5" :key="index">
                {{index}}-{{value}}
            </li>
        </ul>
    </div>
    <script>
        Vue.config.productionTip = false;  //阻止vue在启动时生成生产提示
        //创建实例
        let vm = new Vue({
            el:"#box",
            data:{
                persons:[
                    {id:01,name:"su",age:21},
                    {id:01,name:'ming',age:22},
                    {id:03,name:'xiaohu',age:25}
                ],
                car:{
                    name:"奥迪",
                    color:"black",
                    producted:"2021"
                },
                str:"beijing"
            }
        })
    </script>
</body>
</html>


实例效果:



面试题:key的内部原理


  1. 虚拟DOM中key的作用:


key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】,


随后Vue进行【新虚DOM】与【旧虚拟DOM】的差异比较,比较规则如下:


  1. 对比规则:


(1). 旧虚拟DOM中找到了与新虚拟DOM相同的key:


1.若虚拟DOM中内容没变,直接使用之前的真实DOM !


2.若虚拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DOM。


(2). 旧虚拟DOM中未找到与新虚拟DOM相同的key


创建新的真实DOM,随后渲染到到页面。


  1. 用index作为key可能会引发的问题:


1.若对数据进行:逆序添加、逆序删除等破坏顺序操作:会产生没有必要的真实DOM更新=>界面效果没问题,但效率低。


2.如果结构中还包含输入类的DOM:会产生错误DOM更新=>界面有问题。


  1. 开发中如何选择key?:


1.最好使用每条数据的唯一标识作为key,比如id、手机号、身份证号、学号等唯一值。


2.如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,使用index作为key是没有问题的。


目录
相关文章
|
2天前
|
敏捷开发 人工智能 JavaScript
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
Figma-Low-Code 是一个开源项目,能够直接将 Figma 设计转换为 Vue.js 应用程序,减少设计师与开发者之间的交接时间,支持低代码渲染和数据绑定。
20 3
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
|
2月前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
36 1
|
2月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
84 1
|
2月前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
2月前
|
JavaScript
Vue 双向数据绑定原理
Vue的双向数据绑定通过其核心的响应式系统实现,主要由Observer、Compiler和Watcher三个部分组成。Observer负责观察数据对象的所有属性,将其转换为getter和setter;Compiler解析模板指令,初始化视图并订阅数据变化;Watcher作为连接Observer和Compiler的桥梁,当数据变化时触发相应的更新操作。这种机制确保了数据模型与视图之间的自动同步。
|
2月前
|
数据采集 JavaScript 搜索推荐
服务器端渲染(SSR)(Nuxt+Next.js)
服务器端渲染(SSR)技术在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js和Next.js分别是基于Vue.js和React.js的流行SSR框架。Nuxt.js提供自动化路由管理、页面级数据获取和布局系统,支持SSR和静态站点生成。Next.js支持SSR、静态生成和文件系统路由,通过`getServerSideProps`和`getStaticProps`实现数据获取。SSR的优点包括首屏加载快、SEO友好和适合复杂页面,但也会增加服务器压力、开发限制和调试难度。选择框架时,可根据项目需求和技术栈决定使用Nuxt.js或Next.js。
|
2月前
|
缓存 JavaScript 搜索推荐
Vue SSR(服务端渲染)预渲染的工作原理
【10月更文挑战第23天】Vue SSR 预渲染通过一系列复杂的步骤和机制,实现了在服务器端生成静态 HTML 页面的目标。它为提升 Vue 应用的性能、SEO 效果以及用户体验提供了有力的支持。随着技术的不断发展,Vue SSR 预渲染技术也将不断完善和创新,以适应不断变化的互联网环境和用户需求。
89 9
|
2月前
|
监控 JavaScript 前端开发
Vue 异步渲染
【10月更文挑战第23天】Vue 异步渲染是提高应用性能和用户体验的重要手段。通过理解异步渲染的原理和优化策略,我们可以更好地利用 Vue 的优势,开发出高效、流畅的前端应用。同时,在实际开发中,要注意数据一致性、性能监控和调试等问题,确保应用的稳定性和可靠性。
|
2月前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
67 0
|
2月前
|
JavaScript 前端开发 开发者
JavaScript框架React vs. Vue:一场性能与易用性的较量
JavaScript框架React vs. Vue:一场性能与易用性的较量
41 0