首页 > 其他分享 >vue2中 watch和computed的区别

vue2中 watch和computed的区别

时间:2023-12-28 10:58:06浏览次数:40  
标签:异步 Vue computed watch vue2 操作 数据

计算属性(Computed)

  1. computed 是基于依赖关系进行缓存的。只有当相关的响应式依赖发生改变时,才会重新求值。适合于执行更复杂的数据操作。
  2. computed 属性是计算出来的,不会对原始数据造成任何副作用。
  3. computed 属性可以具有 setter 和 getter 方法,可以更灵活地控制数据的操作。

侦听器(Watch)

  1. watch 是用于观察和响应 Vue 实例上的数据变化的一种方法。在数据变化时执行异步或开销较大的操作时,watch 是一个很好的选择。
  2. watch 允许执行任何异步或开销较大的操作,而无需担心性能问题,因为它只会在数据实际发生变化时执行。
  3. watch 可以用来观察全局数据或组件内的数据。

分别举例子说明一下

  • computed

假设有一个计算属性,用于将两个数字相加并返回结果:

new Vue({  
  el: '#app',  
  data: {  
    num1: 1,  
    num2: 2  
  },  
  computed: {  
    sum: function () {  
      return this.num1 + this.num2;  
    }  
  }  
});

在这个例子中,sum 是一个计算属性。当 num1num2 发生变化时,sum 会自动重新计算并返回新的结果。

  • watch

假设我们有一个侦听器,用于在某个数据变化时执行异步操作:

new Vue({  
  el: '#app',  
  data: {  
    message: 'Hello Vue!'  
  },  
  watch: {  
    message: function (newVal, oldVal) {  
      // 这是一个异步操作,用于处理新的消息值  
      setTimeout(() => {  
        console.log('Message changed from ' + oldVal + ' to ' + newVal);  
      }, 1000);  
    }  
  }  
});

在这个例子中,有一个侦听器监视 message 数据的变化。当 message 发生变化时,侦听器会异步地打印出新的消息值。注意,使用了 setTimeout 来模拟异步操作。

 

总结

  • 如果需要基于其他响应式数据执行复杂的计算操作,并且这些操作应该被缓存(只在相关数据发生变化时重新计算),那么你应该使用 computed
  • 如果需要观察和响应 Vue 实例上的数据变化,并且这些操作是异步或开销较大的,那么你应该使用 watch

标签:异步,Vue,computed,watch,vue2,操作,数据
From: https://www.cnblogs.com/shyhuahua/p/17930595.html

相关文章

  • vue2 自定义插件
    自定义插件的基本使用:letMyPlugin={};MyPlugin.install=function(Vue,options){//1.添加全局方法或propertyVue.myGlobalMethod=function(){//逻辑...}//2.添加全局资源Vue.directive('my-directive',{bind(el,binding,vnode,......
  • 海康威视WebSDK_V3.3.0 集成vue2项目避坑+解决方案
    最近新需求项目集成WebSDK_V3.3.0的视频插件,开发过程中遇到了一些问题,如下:无法正确引入插件/InitPlugin报错使用文档中写的I_DestroyPlugin报错并且再次Init插件后无法正常播放,报错如下:如果你也有类似问题请往下看首先开发包如下:1.无法正确引入插件/InitPlugin报错首......
  • vue2学习按钮点击(转载)
    Vue2学习笔记:v-on Vue的事件:v-on:click/mouseover/mouseover/mousedown/dbclick/...下面是点击事件介绍: 1.点击事件<!DOCTYPEhtml><html><head><title></title><metacharset="utf-8"><scriptsrc="http:......
  • 解决前端vue2报错 Error: Can't resolve cache-loader和Error: Can't resolve babel-l
    总得说来报这种Error:Can'tresolve+模块名字的错误,一般就只有两种原因:一、少了这个包(直接安装:pnpmadd-D模块名字@版本),二、有这个包,但是版本在package.json中不正确。需要和你的vue/cli-service的版本对应上,该降级的时候降级,降级一般先删除再安装新的pnpmremovecss-loaderpn......
  • v-for v-if不建议一起用 解决办法 使用 computed
    <el-table-columnv-for="(item,index)innewDynamicColumns":key="index":prop="item.prop":label="item.label":align="item.align":width=&qu......
  • 【源码系列#04】Vue3侦听器原理(Watch)
    专栏分享:vue2源码专栏,vue3源码专栏,vuerouter源码专栏,玩具项目专栏,硬核......
  • VUE框架引入Vue3与Vue3和Vue2在main.js里的区别------VUE框架
    //不再引入vue了,Vue3中,引入了一个createApp函数,可以创建APP对象import{createApp}from'vue';//引入了一个根组件AppimportAppfrom'./App.vue';//这行代码创建了一个APP对象,类似于之前vue2的vm对象//app比vm更加轻便,代价是属性要少constapp=createApp(A......
  • 前端歌谣-第伍拾陆课-vue2-element组件封装el-button-groups(续)
    前言我是歌谣今天继续给大家带来el-button-groups(项目的讲解背景颜色属性color:style="item.color?{background:item.color,borderColor:item.color}:{}"btns:[{//按钮名称name:"歌谣",//按钮类型......
  • Vue学习计划-Vue2--VueCLi(八)vuex统一状态管理实现数据共享
    1.vuex是什么概念:专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对Vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。这个怎么理解呢?可以暂时理解成全局事件总线、消息订阅与发布一样的道理,把vuex当成是外部的一个储存空间,......
  • vue2加载远程组件
    <template> <divclass="async-component"> <div@click="child">hahah</div> <componentref="test":is="remote"v-if="remote":test="test"@handler="haha"/> ......