【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是没有问题的。


目录
相关文章
|
4天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
41 1
|
15天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
46 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
32 1
|
2月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
39 1
vue学习第四章
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
33 1
|
2月前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
35 1
|
2月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
81 1
|
2月前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。