computed
计算属性主要是对于一个变量进行逻辑运算之后,获得一个新的值,相比于在模板template中写入逻辑运算也更加清晰明了,并且更加的有利于后期维护,并且,计算属性是由缓存机制的,当其依赖的属性的值发生变化的时,计算属性会从新计算。反之则使用缓存中的属性值。
1.基础使用之getter函数
- 比方说是一我的的姓名,分为姓和名,即
firstName和lastName
,接下来,用计算属性得出它的fullName
export default {
name: "Test",
data(){
return{
firstName:'',
lastName:'',
}
},
computed:{
fullName(){
return `${this.firstName} ${this.lastName}`;
}
}
}
复制代码
- 上面其实只是缩写,他的实际写法应该是这样子的,这里其实主要是用到了计算属性的
getter
函数
computed:{
fullName:{
get(){
return `${this.firstName} ${this.lastName}`;
}
}
}
复制代码
2.基础使用之setter函数
- 能够看到,上面的全名格式就是姓名之间用了空格分隔,那么,咱们换一种思路,若是咱们经过设置了它的全名,是否能够经过设置的全名拿到回调,返回它的姓和名,这时候,就能够用到
setter
函数,即操做this.fullName='jack demon'
,那么,它的姓和名都会触发相应的更新。
computed:{
fullName:{
get(){
return `${this.firstName} ${this.lastName}`;
},
set(newValue){
let names=newValue.split(' ');
this.firstName=names[0];
this.lastName=names[1];
}
}
}
复制代码
3.使用计算属性结合v-for来提升性能
- 在vue性能提高中有一个说法,是
v-for
和v-if
最好不要同时使用,会下降性能,由于首先你要明白一点,v-for的优先级要比v-if要高,因此,举个例子,当你有一个长度为5的数组须要遍历,但其中只有大于50才显示,通过v-if之后才显示,虽然你只显示一条,但仍然须要遍历整个数组,因此,这种时候,就能够先用计算属性进行过滤,而后再用v-for渲染计算属性过滤以后获得的列表。tips:
对于不须要改动的长列表,可使用Object.freeze()
进行性能优化哦
<template>
<div>
<ul>
<li v-for="(item,index) in filterList" :key="index">{{item}}</li>
</ul>
</div>
</template>
<script>
export default {
name: "Test",
data(){
return{
list:[8,20,28,52,33],
}
},
computed:{
filterList:{
get(){
return this.list.filter(x=>x>50); //[52]
},
}
},
}
</script>
复制代码