今年面试又被问到computed和method的区别,一时之间我竟然没反应过来这两有什么区别,或者说这俩根本就不是一回事,处处都是区别。(本人记性不好,背八股是真的很不在行。)
最后我给出的回答就是,method是方法是函数,使用场景是用方法触发以及函数处理。而computed是一个属性,对其涉及到的其他属性进行依赖,随依赖变更进行更新,更多的相当于基于data里面的属性设置的一个特殊属性。使用场景是这个属性依赖其他属性数据变动是时。
此时面试官问到,你知不知道computed的缓存?
是啊,computed会缓存属性,知道依赖更新才会更新数据。而method是应用到就会再次执行。
。。。。。。
我能明显感受到来自面试官的鄙夷。非常的不服气,面试结束之后我又打开了vue的官网。
官网这里确实提到了计算属性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原理和用法都是相同的吧?(自我怀疑一分钟)
所以,他到底想问什么,哭泣😢!!!救救孩子