Vue基础/v-for/虚拟DOM...

252 阅读2分钟

v-for 更新监测

1. 了解v-for更新的机制

口诀:数组变更方法, 就会导致v-for更新, 页面更新 数组非变更方法, 返回新数组, 就不会导致v-for更新, 可采用覆盖数组或this.$set()

哪些数组方法会导致v-for更新页面?
  • 可以改变原数组的方法
有的数组方法不导致v-for更新页面, 如何处理?
  • 拿返回的新数组, 直接替换旧数组
  • this.$set()方法更新某个值

2. v-for就地更新

v-for 的默认行为会尝试原地修改元素而不是移动它们

虚拟DOM

概念:vue文件中的template里写的标签, 都是模板, 都要被vue处理成虚拟DOM对象, 在生成真实DOM片段, 才会渲染显示到真实DOM页面上

1.内存中生成一样的虚拟DOM结构(==本质是个JS对象==) 因为真实的DOM属性好几百个, 没办法快速的知道哪个属性改变了 比如template里标签结构 2.0. 以后vue数据更新

   生成新的虚拟DOM结构
   和旧的虚拟DOM结构对比
   找不不同, 只更新变化的部分(重绘/回流)到页面 - 也叫打补丁

好处1: 提高了更新DOM的性能(不用把页面全删除重新渲染)

好处2: 虚拟DOM只包含必要的属性(没有真实DOM上百个属性)

问答:虚拟DOM是什么?

  • 本质就是一个JS对象, 保存DOM关键信息

虚拟DOM的好处?

  • 提高DOM更新的性能, 不频繁操作真实DOM, 在内存中找到变化部分, 更新真实DOM(打补丁)

key作用

基本属性:无key, 就地更新--- 有key为索引, 就地更新--- 有key为id, 对比新旧DOM, 无则创建/删除 image.png

问答:子元素或者内容改变会怎么比较?

  • 无key, 就地更新, 有key按照key比较 key值要求是?
  • 唯一不重复的字符串或者数值 key应该怎么用?
  • 有id用id, 无id用索引 key的好处?
  • 可以提高更新的性能

动态class/style

用v-bind给标签class设置动态的值

如何给标签class属性动态赋值?

  1. :class=“{类名: 布尔值}”, true使用, false不用

动态style的语法:style="{css属性: 值}"

计算属性-computed

概念:一个数据, 依赖另外一些数据计算而来的结果

语法: computed: {

"计算属性名" () {

return "值"

}

}

计算属性特点:函数内使用的变量改变, 重新计算结果返回

注意事项:计算属性名和data里名字不能重复

计算属性的特性:带缓存---依赖项不变, 直接从缓存取---赖项改变, 函数自动执行并重新缓存

计算属性-完整写法

set函数和get函数什么执行?

  1. set接收要赋予的值
  2. get里要返回给这个计算属性具体值

侦听器-watch

概念:可以侦听data/computed属性值改变

语法:

如何侦听到某个变量值改变?

使用watch配置项, key是要侦听的data/计算属性名

深度监听:

\