吐槽computed和method的区别

131 阅读2分钟

今年面试又被问到computed和method的区别,一时之间我竟然没反应过来这两有什么区别,或者说这俩根本就不是一回事,处处都是区别。(本人记性不好,背八股是真的很不在行。)

最后我给出的回答就是,method是方法是函数,使用场景是用方法触发以及函数处理。而computed是一个属性,对其涉及到的其他属性进行依赖,随依赖变更进行更新,更多的相当于基于data里面的属性设置的一个特殊属性。使用场景是这个属性依赖其他属性数据变动是时。

此时面试官问到,你知不知道computed的缓存?

是啊,computed会缓存属性,知道依赖更新才会更新数据。而method是应用到就会再次执行。

。。。。。。

我能明显感受到来自面试官的鄙夷。非常的不服气,面试结束之后我又打开了vue的官网。

截屏2023-03-17 13.21.58.png

官网这里确实提到了计算属性VS方法,计算属性VS监听器。

一句话,计算属性是基于它们的响应式依赖进行缓存的

咱就说,虽然求数据,computed和method里面的方法都能return。但是懂得都懂,computed里注册和method里注册,console.log(newAge)出来,一个是observer,一个是function。与其问两者之间的区别不如直接感受一下observer和function。

computed:{
  newAge(){
    return this.age + 2
  }
},
method:{
  newAge(){
    return this.age + 2
  }
},

而且以上在computed里和method里的newAge()的写法一样,完全是computed提供的一种简写。感受一下computed的完整写法,再次感叹一下getter和setter的妙用。

(setter这里近乎是实现watch的功能了)

computed:{
  fullName:{
    // getter
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    // setter
    set: function (newValue) {
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
},

我目前已经有一年工作经验,在工作中切实的感受,基本这三者不会被拿来可以比较,因为三者对应的使用状况、实现的功能是完全不同的,使用场景也是很容易区分的。

1、method

2、computed

3、watch

另外还想吐槽面试官问:你知道vue3中computed怎么用吗?

我。。。。。。

我真是无力吐槽了,贴代码吧:

//vue2
data(){
  return{
   age:16
  }
}
computed:{
  newAge(){
    return this.age + 2
  }
}
​
//vue3
setup () {
    const age = ref(16)
    const newAge = computed(()=>{
      return age.value + 2
    })
 }

除了写法格式变动了,vue2和vue3里面computed API原理和用法都是相同的吧?(自我怀疑一分钟)

所以,他到底想问什么,哭泣😢!!!救救孩子