computed/watch深度监听

简介: computed/watch深度监听

Vue.js 中,computedwatch 是两种处理动态数据变化并触发相应逻辑的方法,但它们的工作方式和用途有所不同。

computed

computed 属性用于声明一个依赖于其它响应式数据(如 dataprops 或其他 computed 属性)的属性。当这些依赖发生变化时,computed 属性会重新计算并返回新的值。

computed 属性默认是深度监听的,意味着如果 computed 属性的依赖是一个对象或数组,那么该对象或数组内部的任何变化都会触发 computed 属性的重新计算。

示例:

export default {  
  data() {  
    return {  
      items: [  
        { id: 1, name: 'Item 1' },  
        { id: 2, name: 'Item 2' }  
      ]  
    };  
  },  
  computed: {  
    // 深度监听 items 数组中的对象变化  
    totalNamesLength() {  
      return this.items.reduce((total, item) => total + item.name.length, 0);  
    }  
  }  
};

在上面的例子中,如果 items 数组中的任何一个对象的 name 属性发生变化,totalNamesLength computed 属性都会重新计算。

watch

watch 选项用于观察和响应 Vue 实例上的数据变化。默认情况下,watch 是浅监听的,意味着它不会观察到对象内部属性的变化。如果你需要深度监听对象或数组的变化,你需要在 watch 选项的配置中明确指定。

示例:

export default {  
  data() {  
    return {  
      items: [  
        { id: 1, name: 'Item 1' },  
        { id: 2, name: 'Item 2' }  
      ]  
    };  
  },  
  watch: {  
    // 深度监听 items 的变化  
    items: {  
      handler(newVal, oldVal) {  
        console.log('items changed:', newVal);  
      },  
      deep: true // 启用深度监听  
    }  
  }  
};

在上面的例子中,由于 deep 选项设置为 true,所以 watch 会深度监听 items 数组的变化,包括数组内部对象属性的变化。

总结

  • computed 属性默认深度监听其依赖的数据变化,并自动重新计算。
  • watch 默认浅监听数据变化,需要设置 deep: true 以启用深度监听。

选择使用 computed 还是 watch 通常取决于你的需求:

  • 如果你需要基于已有数据计算新值,并且这个值需要被缓存并在其它地方复用,使用 computed
  • 如果你需要在数据变化时执行异步操作或复杂逻辑,或者仅当数据变化时才触发某些行为,使用 watch
目录
相关文章
|
前端开发 JavaScript 小程序
Taro框架使用canvas生成图片-附带源码和效果
Taro框架使用canvas生成图片-附带源码和效果
1419 0
Taro框架使用canvas生成图片-附带源码和效果
|
Java Apache Spring
springboot如何导出Excel某个表的表字段以及字段类型
springboot如何导出Excel某个表的表字段以及字段类型
474 0
在 Vue.js 中使用 watch 来监听对象属性的变化
在 Vue.js 中使用 watch 来监听对象属性的变化
|
编解码
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
《FFmpeg开发实战》书中3.4.3节讲解如何将H.264流封装成MP4。H.264流通常以SPS→PPS→IDR帧开始,这一说法通过雷霄骅的H264分析器得到验证。分析器能解析H.264文件但不支持MP4。ZLMediaKit服务器在遇到I帧时会自动插入SPS和PPS配置帧,确保流符合标准格式。若缺少这些帧,客户端拉流时会报错。FFmpeg开发实战:从零基础到短视频上线》书中提供了更多FFmpeg开发细节。
609 0
FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作
|
小程序 JavaScript 数据库
微信小程序|考试系统|基于微信小程序和SpringBoot+VUE的智能在线考试系统毕业设计
微信小程序|考试系统|基于微信小程序和SpringBoot+VUE的智能在线考试系统毕业设计
882 0
|
缓存 前端开发 JavaScript
微前端集成优化:让所有子应用体积更小,加载更快!
【8月更文挑战第17天】微前端集成优化:让所有子应用体积更小,加载更快!
512 1
微前端集成优化:让所有子应用体积更小,加载更快!
|
编解码 前端开发 JavaScript
ThreeJs制作模型图片
这篇文章介绍了如何使用Three.js将一张图片转化为3D场景中的像素化模型,通过提取图片的像素颜色并将它们应用到3D立方体上,形成一种特殊的图像展示效果。
317 0
ThreeJs制作模型图片
|
人工智能 C++
【Azure Developer】上手 The Best AI Code "Cursor" : 仅仅7次对话,制作个人页面原型,效果让人惊叹!
本文介绍了使用 Cursor 这款 AI 辅助编程工具的步骤与体验。通过下载安装 Cursor 并使用 GitHub 账号登录,你可以创建 HTML 文件并借助 AI 自动生成代码。文章详细描述了如何逐步优化生成的内容,包括调整布局、增加样式及响应式设计等。此外,还展示了通过多次迭代改进后的最终效果,并提供了生成的 HTML 模板代码,便于读者直接使用或进一步修改。
594 3
|
JavaScript 前端开发 测试技术
[新手入门]todolist增删改查:vue3+ts版本!
【10月更文挑战第15天】[新手入门]todolist增删改查:vue3+ts版本!
|
JavaScript
vue-demi
vue-demi
430 0