Vue2-computed计算属性与watch监听器

246 阅读3分钟

1# computed 与 watch 的细节

(1)computed

  1. 缓存支持: 计算属性支持缓存,只有当依赖数据发生改变时才会重新计算;如果依赖未改变,则从缓存中读取。
  2. 必须有返回值: 计算属性必须包含 return 语句以返回计算结果。
  3. 类似执行方法: 类似于一个执行方法,使用方式类似于 data 中的数据,但实际上是基于依赖进行计算得到的值。
  4. 不支持异步操作: 无法监听内部包含异步操作的数据变化。
  5. 依赖关系: 计算属性是基于依赖值或 props 计算得来的数据,能够实时响应数据的变化。
  6. 缓存机制: 计算值在 getter 执行后被缓存,仅当其依赖的数据发生变化时才会重新计算。
  7. 灵活定义: 即使 data 中没有直接声明要计算的变量,也可以直接在 computed 中定义,方便组织和管理相关计算逻辑。
  8. 默认只有 getter 计算属性默认只具有 getter,但可以在需要时自定义 setter 来实现更复杂的逻辑。
  9. 上下文绑定: 所有 gettersetterthis 上下文自动地绑定为 Vue 实例,方便访问实例的其他属性和方法。

(2)watch

  1. 无缓存支持: Watcher 不支持缓存,数据变化会直接触发相应的操作。
  2. 支持异步操作: 可以监听并响应异步操作的数据变化。
  3. 数据监听器: Watcher 是一种监听器,用于监听特定数据的变化并执行相应操作。
  4. 参数接收: 监听函数接收两个参数,分别是最新的值和之前的值,便于在操作中对比和处理数据变化。
  5. 基于数据名称: 函数名必须与数据名一致,以确保正确监听指定数据的变化。
  6. 自动触发: 监听函数会在数据变化时自动触发,无需手动调用。
  7. 数据值监听: 默认只监听数据值的改变,不会监听数据地址的改变。若需要深度监听,可配合 deep: true 属性实现。
  8. 立即执行: 若需要在页面首次加载时立即执行监听,可配合 immediate: true 属性实现。

2# computed 与 watch 的区别

计算属性 (computed)监听属性 (watch)
支持缓存不支持缓存
计算值在 getter 执行后被缓存监听函数会在数据变化时自动触发
计算结果基于依赖值或 props 属性用于监听特定数据的变化
函数名需另起并作为计算属性函数名必须与数据名一致
只有在依赖数据改变时才会重新计算属性数据变化时就会直接触发监听函数
函数必须包含 return 语句返回计算结果监听函数不需要返回值
不能监听内部包含异步操作的数据变化可以监听并响应异步操作的数据变化
默认只有 getter 方法默认只监听数据值的改变
getter 方法可携带参数
setter 方法参数固定为:(value)
函数参数固定为:(newValue, oldValue)
可结合 settergetter 方法灵活控制可结合 deep: trueimmediate: true 属性实现深度监听与立即监听