Vue常见指令和key和diff算法

Posted coder斌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue常见指令和key和diff算法相关的知识,希望对你有一定的参考价值。

常见指令

v-bind指令

基本使用

相应式数据不仅仅可以展示在胡子语法内,而且可以绑定到标签的属性上。

image-20210614091943341

v-bind的语法糖写法

v-bind:href=""===>>> :href v-bind用 : 表示

v-bind绑定class对象语法

image-20210614094049073

v-bind绑定class数组语法

image-20210614094301275

v-bind绑定style 对象语法

image-20210614095425078

v-bind绑定style 数组语法

image-20210614095904122

v-bind动态绑定属性名称

image-20210614100531165

v-bind属性直接绑定一个对象

类似于对象的解构

image-20210614100709945

v-on指令

image-20210614100842276

条件渲染指令

基本使用

image-20210614101219696

多个条件渲染

v-if v-else-if 和 v-else的使用

image-20210614101251068

templatev-if的使用

同样的使用,但是v-if放在template上包裹内容,浏览器最后渲染是不会有template这个标签的,而用div则会存在

image-20210614101657100

v-show的条件渲染

使用和v-if一样,但v-show不支持 template & v-else

v-if和v-show的区别

简而言之就是在渲染条件为false的时候,v-if 是直接对应标签移除 DOM 文档,v-show 是在对应标签上加 display:none

image-20210614102019536

v-for指令

在遍历标签内,其实有无key都可以,虽然有事不写 key 会报错,但浏览器还是会正常解析

image-20210614103345106

key和diff算法

概念

VNode( Virtual DOM)又叫虚拟DOM:本质上就是一个javascript对象,用对象来表述 一个标签的信息,如父节点,子节点,属性,和属性值等等。用这种方式描述 标签,可以减少重绘和重排,提高浏览器的压力。

key有两个方面的运用:

  • 在 v-if 内,若条件判断内有相似的结构(元素类型一致),例如,v-ifv-else 内都有一个input,我们在v-if的input内填入东西,切换成v-else后,发现v-else的input是我们之前输入的值。在代码上我们知道这是两个不同的input,但为什么第一个input的内容会出现在第二个内。WHY?

    原因是vue为例渲染的高效性,会复用已经存在的元素,这就意味着我们要告诉vue这是两个不同的input标签,我们就可以在两个input上加上不同的 key 值区分

  • 在v-for内,key值主要用于 diff算法,在新旧VNodes对比时辨识Vnode。

    • 没有key时:vue只会简单复用当前位置上的相同类型的元素
    • 有key时:vue会根据key的位置对元素进行重新排序,增加或删除key对应的元素。修改v-for已挂载的内容,会生成新旧两个虚拟DOM树,进行对比,diff算法会充分利用已经存在的元素,对应到新的DOM树上。因为一点点内容就删除一个节点,创建新的节点是非常消耗性能的。

部分源码

image-20210614110445226

存在key时执行这一部分 patchKeyedChildren()方法

image-20210614111501709

不存在key时执行这一部分,patchUnkeyedChildren()方法

image-20210614112542964

以上是关于Vue常见指令和key和diff算法的主要内容,如果未能解决你的问题,请参考以下文章

图解vue中 v-for 的 :key 的作用,虚拟dom Diff算法

Vue原理-虚拟DOM和diff算法

简单几句话,知道啥是回流重绘、vue虚拟dom、diff算法和key

vue中使用v-for时为啥不能用index作为key?

前端技能树,面试复习第 27 天—— React Diff 算法的原理,和 Vue 有什么区别 | 虚拟 DOM | key 的原理,为什么要用

v-for中key的作用