本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
条件渲染
- 需要根据当前条件决定某些元素或组件是否渲染,这个时候我们就需要进行条件判断。
- v-if
- v-else
- v-else-if
- 结果为true才会渲染出来
- 这三个指令与if、else、else if类似
<ul v-if="names.length > 0">
<li v-for="item in names">{{item}}</li>
</ul>
<h2 v-else>当前names没有数据,请求获取数据后展示</h2>
-
template(vue3)
- 包裹多个元素,把渲染条件添加在上面,该元素不会被渲染到页面
-
-show
-
v-show也是根据一个条件决定是否显示元素或者组件
-
v-show与v-if的区别
- 不能用template,DOM是实际存在的
- 本质是display
- 不可以与else if一起用
-
v-for
-
从服务器拿到一组数据,并需要对其进行渲染
-
v-for类似于JavaScript的for循环,可以用于遍历一组数据
-
v-for基本格式是“item in 数组”
- 数组通常是来自data或者prop,也可以是其他方式
- item是我们给每项元素的一个别名
-
拿到索引值---格式“{item, index} in 数组”
v-for支持的类型
-
v-for也支持遍历对象,并且支持一二三个参数
- 一个参数:“value in object”
- 二个参数:“(value,key)in object”
- 三个参数:“(value,key,index)in object”
-
遍历字符串--遍历每一个字符
- 基本上可迭代对象都可以遍历
- 遍历数字--从1数到那个数字
VNode 虚拟DOM
- Virtual Node ,虚拟节点
- 无论是组件还是元素,他最终在Vue中表示出来的都是一个个VNode
- VNode的本质是一个JavaScript对象
- template --> VNode --> 真实DOM
虚拟DOM
- 如果我们不只是一个简单的虚拟DOM,而是一大堆的元素,那么它们应该会形成一个VNode Tree
- VNode --> 树结构 --> 虚拟DOM
v-for中的key属性
- 在使用v-for进行列表渲染时,我们通常会给元素或组件绑定一个key属性
<li v-for = "item in letters" :key ="item">
{{item}}
</li>
- key属性主要用在Vue的虚拟DOM算法,在新旧nodes对比时辨识VNodes
- 使用key,他会基于key的变化重新排列元素顺序,并且会移除/销毁key不存在的元素
Diff算法
- 有ket的diff算法
-
第一步,从头开始进行遍历、比较
- 若key一致就继续进行比较
- 若因为key不一致,所以就会break跳出循环
-
第二步,从尾开始进行遍历、比较
-
第三步,如果旧节点遍历完毕,但是依然有新的节点,那么就新增节点
-
第四步,如果新的节点遍历完毕,但是依旧有旧的节点,那么就移除旧节点
-
第五步,特色情况,中间还有很多未知的或者乱序的节点
数组更新检测
- Vue将侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新
-
直接将数组修改为一个新的数组
-
通过一些数组方法,来修改数组中的元素
- push()
- pop()
- shift()
- unshift()
- splice()
- sort()
- reverse()
不修改原数组的方法是不能倾听的