Vue3 计算属性
计算属性关键词: computed。
计算属性在处理一些复杂逻辑时是很有用的。
可以看下以下反转字符串的例子:
<script setup>
// This starter template is using Vue 3 <script setup> SFCs
// Check out https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup
import HelloWorld from './components/HelloWorld.vue'
</script>
<template>
<div>
{{ msg.split('').reverse().join('') }}
<br>
使用 methods 计算后反转字符串:{{reverseMsg2()}}
<br>
使用 computed 计算后反转字符串:{{reverseMsg1}}
</div>
</template>
<script>
export default{
name:'App',
data(){
return{
msg : "abcdefghi"
}
},
methods:{
changeMsg:function(){
this.msg="hulk handsome"
this.id="d2"
},
reverseMsg2(){
return this.msg.split('').reverse().join('')
}
},
computed:{
reverseMsg1:function(){
return this.msg.split('').reverse().join('')
}
},
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
#d1{
widows: 100px;
height: 100px;
background: yellow;
}
/*.d1 表示类名 */
.d1{
widows: 100px;
height: 100px;
background: green;
}
</style>
声明了一个计算属性 reverseMsg1。
提供的函数将用作属性 App.reverseMsg1的 getter 。
App.reverseMsg 依赖于 App.message,在 App.message 发生改变时,App.reverseMsg1 也会更新。
computed vs methods
可以使用 methods 来替代 computed,效果上两个都是一样的,但是 computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。而使用 methods ,在重新渲染的时候,函数总会重新调用执行。
实例 3
methods: {
reverseMsg2(){
return this.msg.split(’’).reverse().join(’’)
}
}
可以说使用 computed 性能会更好,但是如果你不希望缓存,你可以使用 methods 属性。另外在调用methods当中的函数时候需要加()
computed setter
computed 属性默认只有 getter ,不过在需要时你也可以提供一个 setter :
https://www.runoob.com/vue3/vu3-computed.html