[Vue] vue学习笔记(3): 渲染

发布时间 2023-11-29 21:52:07作者: Akira300000

条件渲染

主要有四个指令

  • v-show:控制元素可视性,即是否增加样式display=none
  • v-if/v-else-if/v-else:类似if/else-if/else的逻辑结构,进行条件判断,控制元素的可视性,注意这种方法会直接决定元素是否出现DOM树上,而非样式改变
< !--- n is a property of vue instance --- >
<div v-if="n===1">Angular</div>
<div v-else-if="n===2">React</div>
<div v-else-if="n===3">Vue</div>
<div v-else>guess</div>
< !--- v-else needs no js expr --- >

template的使用

假设有复数个元素的可视性判断条件相同,可以使用template来统一控制,这种情况下只能使用v-if

< !--- n is a property of vue instance --- >
<template v-if="n === 1">
	<h2>Apple</h2>
	<h2>Banana</h2>
	<h2>Corn</h2>
</template>

列表渲染

使用v-for来遍历数组,对象,字符串或指定次数

<h2>遍历数组</h2>
<ul>
	<li v-for="(p, index) in people" :key="index">
		{{index}}: {{p.name}} - {{p.age}}
	</li>
</ul>
< !---  --- >
<h2>遍历对象 - js对象是由k-v键值对组成的</h2>
<ul>
	<li v-for="(v, k) in student" :key="k">
		{{k}} - {{v}}
	</li>
</ul>

key的作用

⬇️一图流说明key的作用⬇️

  • 以索引作为key❌
    解释:对于数组中的对象中来说,索引值并不是与其绑定的唯一标准。如图所示,由于数组更新后的第一条记录(即存储的对象)与先前的发生了变化,但是key值不变,而vue依据key值来判断是更新还是复用旧虚拟DOM上的元素
    ⚠️以第一条数据key='0'为例,其中的文本元素发生了变化,因此vue更新了其值;而输入框元素无变化,vue将选择复用旧DOM的元素,无论输入框内是否已经有输入的内容。以此类推,会得到一个错位的人员列表
    image

  • 以id为key(更好的效率,在此场景下推荐)✅
    解释:对象的id是作为识别对象的唯一标识的最好选择,依照vue根据key值排查元素的机制,这样做很好地保证了顺序性,避免了错位,也节省了资源--因为vue实际上只更新了最后也是最新的那一行数据
    image

  • 结论:由此可知,在没有逆序增加/删除元素的情况下,使用index是没问题的