watch(监视属性)和computed(计算属性)的区别

watch(监视属性)和computed(计算属性)的区别

watch 和 computed 是vue实例对象中的两个重要属性,watch是监视属性,用来监视vue实例对象上属性和方法的变化,computed被称为计算属性,可以将data对象中的属性进行计算得到新的属性;由于watch属性监视data对象中的属性变化时,也能拿到data对象中的属性进行计算。

既然两者都能实现同一功能,两者有什么区别呢?

watch 实现案例
使用场景

1、watch的函数名称必须和data中的数据名一致
2、watch中的函数有两个参数,前者是newVal,后者是oldVal
3、watch中的函数是不需要调用的
4、watch只会监听数据的值是否发生改变,而不会去监听数据的地址是否发生改变,要深度监听需要配合deep:true属性使用
5、immediate:true 页面首次加载的时候做一次监听

使用方式
 //基本语法
watch: {
    // cont表示data中的数据名  newval表示新的数据,oldval表示旧的数据
    cont (newval, oldval) {
      console.log(newval, oldval)
    }
  }

//对象写法
watch: {
    //定义对象格式的侦听器
    cont: {
      //侦听器的处理函数
      handler(newVal, oldVal) {//handler是固定写法
        console. log(newVal, oldVal)
      },
      // immediate 选项的默认佰是false
      // /1 immediate 的作用是:控制侦听器是否自动触发-次!
      immediate: true
      //开启深度监听,只要对象中一个属性变化了,都会触发对象的侦听
      deep:true
  } 
//监听对象中单个属性
    '对象名.属性名'{
        handler(newvalue,oldvulue){
			console.log(newvalue)
        }
        immediate:true
        deep:true
    }
computed 实现案例
使用场景:

1、使用方法和data中的数据一样,但是类似一个执行方法
2、在调用时候不加()
3、必须有return返回
4、如果函数所依赖的属性没有发生变化,从缓存中读取
模板中的表达式常用于简单的运算,当模板中的表达式过长或者其逻辑复杂时,会难以维护,计算属性就是解决该类问题

使用方式
//基础实用方法
computed: {
    //简写方式
    adds () {
      return this.cont + 1
    }// 对象写法,完整写法
     total:{
          get() {
            	 // getter,用于获取属性值,比如:
	            console.log('计算 total...')
	             return this.num1+this.num2
              },
          set(val) { // setter,用于设置(修改)属性值
                console.log('赋值:', val)
              }
	        },
	        //简写
            //total() {
            //    return this.num1+this.num2
            //}
  }
区别

1、功能:computed是计算属性;watch是监听一个值的变化执行对应的回调
2、是否调用缓存:computed函数所依赖的属性不变的时候会调用缓存;watch每次监听的值发生变化时候都会调用回调
3、是否调用return:computed必须有;watch可以没有
4、使用场景:computed当一个属性受多个属性影响的时候;例如购物车商品结算;watch当一条数据影响多条数据的时候,例如搜索框
5、是否支持异步:computed函数不能有异步;watch可以
6、个人理解:watch是在监听到变化时执行某一个回调函数(变化就去做某一件事),computed是监听到变化时去重新计算值。

注意

deep无法监听到数组的变动和对象的新增,参考vue数组变异,只有以响应式的方式触发才会被监听到。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 是一种流行的 JavaScript 框架,它提供了许多使用的 API 来开发单页面应用程序(SPA)和动态用户界面交互。Vue.js 常用的两种 API 是 watchcomputed,这两种 API 都是用于监测数据变化并做出相应响应的。 watchVue.js 的一个实例 API,它用于监测指定属性的变化并在发生变化时执行特定的回调函数。watch 观察的数据称为依赖项。当依赖项发生变化时,回调函数将被执行。watch 可以在实例创建时被定义,也可以在实例运行时动态添加监视器。当需要监控的数据是异步获取的时候,watch 是非常使用的。 相比之下,computed 是一种被设计用来计算被动属性Vue.js 的 API 。computed 挂载在 Vue 实例上,可以根据依赖项的值自动计算新值,并返回结果。这些依赖项可以是 data 选项中的属性,也可以是其他 computed 属性,还可以是 store 中的数据等。computed 运算是基于缓存的,即只有计算依赖项发生变化才会重新计算。computed 的好处在于,当计算结果改变时,Vue.js 会自动调用 computed 属性的所有依赖项,因此无需像 watch 监听数据一样重复编写代码。computed 属性非常适合计算相对复杂的属性,或者根据其他组件属性计算其他属性的场景。 总而言之,watchcomputed 都是 Vue.js 观察数据变化的 API,但是它们的具体用途略有不同。 watch 主要用于监视将来变化的属性,而 computed 则是用于根据现有的数据计算新的属性。根据具体的场景,选择合适的监视器可以提高Vue.js应用程序的性能和响应能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值