首页 > 其他分享 >computed与watch的区别

computed与watch的区别

时间:2022-09-05 18:45:13浏览次数:96  
标签:computed secName 区别 watch methods fullName thirdName

watch,computed和methods的关系

1.watch和computed都是以Vue的依赖追踪机制为基础的,它们都试图处理这样一件事情:当某一个数据(称它为依赖数据)发生变化的时候,所有依赖这个数据的“相关”数据“自动”发生变化,也就是自动调用相关的函数去实现数据的变动。

2.对methods:methods里面是用来定义函数的,很显然,它需要手动调用才能执行。而不像watch和computed那样,“自动执行”预先定义的函数

watch和computed各自处理的数据关系场景不同

1.watch擅长处理的场景:一个数据影响多个数据

2.computed擅长处理的场景:一个数据受多个数据影响

 

 

 

watch用法: 监听下记haiZeiTuan_Name的值,会改变其他所有的值

// 在watch中,一旦haiZeiTuan_Name(海贼团名称)发生改变
   data选项中的船员名称全部会自动改变 (suoLong,naMei,xiangJiShi),并把它们打印出来
 
// 多个)船员名称数据 --> 依赖于 --> (1个)海贼团名称数据一个数据变化 --->  多个数据全部变化
data: {
    haiZeiTuan_Name: '草帽海贼团',
    suoLong: '草帽海贼团索隆', (haiZeiTuan_Name + 海贼名称)
    naMei: '草帽海贼团娜美',
    xiangJiShi: '草帽海贼团香吉士'
},
watch: {
    haiZeiTuan_Name: function (newName) {
      this.suoLong = newName + '索隆'
      this.naMei = newName + '娜美'
      this.xiangJiShi = newName + '香吉士'
      console.log(this.suoLong)
      console.log(this.naMei)
      console.log(this.xiangJiShi)
    }
 }
// 更改watch选项中监控的主数据
vm.haiZeiTuan_Name = '橡胶海贼团'
结果:this.suoLong会变为 '橡胶海贼团索隆',以此类推

 

 computed用法  监听下记firstName,secName,thirdName的值,会改变luFei_Name的值

 data: {
    // 路飞的全名:蒙奇·D·路飞
    firstName: '蒙奇',
    secName: 'D',
    thirdName: '路飞'
  },
  computed: {
    luFei_Name: function () {
      return this.firstName + this.secName + this.thirdName
    }
  }
// 将“路飞”改为“海军王”
vm.thirdName = '海军王'  // 蒙奇·D·海军王

 

 

在很多时候,computed是用来处理你使用watch和methods的时候无法处理,或者是处理起来并不太恰当的情况的

1.相比于watch/computed,methods不处理数据逻辑关系,只提供可调用的函数

 

 methods和computed的区别例子

new Vue({
  el: '#app',
  // 设置两个button,点击分别调用getMethodsDate,getComputedDate方法
  template: 
'<div id="app">
    <button @click="getMethodsDate">methods</button>
    <button @click="getComputedDate">computed</button>
</div>',
  methods: {
    getMethodsDate: function () {
      alert(new Date())
    },
    // 返回computed选项中设置的计算属性——computedDate
    getComputedDate: function () {
      alert(this.computedDate)
    }
  },
  computed: {
    computedDate: function () {
      return new Date()
    }
  }

注意两次点击computed返回的时间是相同的!!

1.两次点击methods返回的时间是不同的

2.注意两次点击computed返回的时间是相同的

【注意】为什么两次点击computed返回的时间是相同的呢?new Date()不是依赖型数据(不是放在data等对象下的实例数据),所以computed只提供了缓存的值,而没有重新计算

只有符合:1.存在依赖型数据 2.依赖型数据发生改变这两个条件,computed才会重新计算。

2.利用computed处理watch在特定情况下代码冗余的现象,简化代码

 

 

new Vue({
  el: '#app',
  data: {
    fullName: '彭湖湾',
    firstName: '彭',
    secName: '湖',
    thirdName: '湾'
  },
  // watch中的代码显然是同类型,重复的,它并不简洁,也不优雅
  watch: {
    firstName: function (newValue) {
      this.fullName = newValue + this.secName + this.thirdName
      console.log(this.fullName)
    },
    secName: function (newValue) {
      this.fullName = this.firstName + newValue + this.thirdName
      console.log(this.fullName)
    },
    thirdName: function (newValue) {
      this.fullName = this.firstName + this.secName + newValue
      console.log(this.fullName)
    }
  }
})

watch中的代码显然是同类型,重复的,它并不简洁,也不优雅,所以我们可以把它变成这样

new Vue({
  el: '#app',
  data: {
    fullName: '彭湖湾',
    firstName: '彭',
    secName: '湖',
    thirdName: '湾'
  },
  // 对watch中的代码进行重构,实现同样效果
  computed: function () {
    this.fullName = this.firstName + this.secName + this.thirdName
    console.log(this.fullName)
  }
})

 

参考:

https://blog.csdn.net/aliyun3/article/details/124329725

https://www.cnblogs.com/penghuwan/p/7194133.html

标签:computed,secName,区别,watch,methods,fullName,thirdName
From: https://www.cnblogs.com/wq805/p/16659185.html

相关文章

  • IPV4 / IPV5 区别
           ......
  • vue3之composition-api的使用(包含watch watchEffect)
    是什么composition-api官方介绍vue2:options-api,组件按照选项组织,就是将组件各个部分严格写在methods、computed、watch、data等等里面(特定的区域写特定的代码);vue3:co......
  • 【Java面试】面试自閟了!工作5年的小伙伴今天面试被吊打问我,并行和并发有什么区别?
    “并行和并发有什么区别?”关于这个问题,很多工作5年以上的同学都回答不出来。或者说,自己有一定的理解,但是不知道怎么表达。大家好,我是Mic,一个工作了14年的Java程序员。......
  • js中null和undefined的区别
    undefind是全局对象的一个属性,当一个变量没有被赋值或者一个函数没有返回值或者某个对象不存在某个属性却去访问或者函数定义了形参但没有传递实参,这时候都是undefined。......
  • requestIdleCallback和requestAnimationFrame的区别
    页面流畅与FPS页面是一帧一帧绘制出来的,当每秒绘制的帧数(FPS)达到60时,页面是流畅的,小于这个值时,用户会感觉到卡顿。1s60帧,所以每一帧分到的时间是1000/60≈16ms。......
  • em与rem的区别
    在css中px、em、rem,这三个的区别是:px是固定像素,一旦设置了就无法因为适应页面而改变。em是rem相对于px更具有灵活性,他们是相对于长度单位的变化而变化,更适应于响应式布......
  • Collection 和 Collections 有什么区别?
    Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如List、Set等。Collections是一个包装类,包含了很多静态方法,不能被......
  • HashMap 和 Hashtable 有什么区别?
    存储:HashMap运行key和value为null,而Hashtable不允许。线程安全:Hashtable是线程安全的,而HashMap是非线程安全的。推荐使用:在Hashtable的类注释可以看到,Hash......
  • vue3——watchEffect函数
    watch的套路是:既要指明监视的属性,也要指明监视的回调。watchEffect的套路是:不用指明监视哪个属性,监视的回调中用到哪个属性,那就监视哪个属性watchEffect有点像comp......
  • BIO、NIO、AIO 有什么区别?
    BIO:BlockIO同步阻塞式IO,就是我们平常使用的传统IO,它的特点是模式简单使用方便,并发处理能力低。NIO:NonIO同步非阻塞IO,是传统IO的升级,客户端和服务器端通过Chann......