1. computed 优点
#
#
#
2. 如何使用
(1) 普通写法,对响应式数据进行自定义的逻辑处理,返回一个变量,直接使用,并实时监听数据变化
<template>
<div class="about">
<div>我是data1:{{ data1 }}</div>
<div>我是data2:{{ data2 }}</div>
<div>我是data3:{{ data3.a }}</div>
<div>我是计算属性:{{ total }}</div>
<button @click="changeData1">修改data1</button>
<button @click="changeData2">修改data2</button>
<button @click="changeData3">修改data3</button>
</div>
</template>
<script setup lang="ts">
import { computed, ref } from 'vue'
let data1 = ref(1)
let data2 = ref(5)
let data3 = ref({ a: 10 })
const total = computed(() => {
return data1.value + data2.value + data3.value.a
})
const changeData1 = () => {
data1.value++
}
const changeData2 = () => {
data2.value += 2
}
const changeData3 = () => {
data3.value.a += 3
}
</script>
(2) 自定义处理 计算属性的 getter 和 setter
<template>
<div class="about">
<div>我是data1:{{ data1 }}</div>
<div>我是data2:{{ data2 }}</div>
<div>我是data3:{{ data3.a }}</div>
<div>我是计算属性:{{ total }}</div>
<button @click="changeData1">修改data1</button>
<button @click="changeData2">修改data2</button>
<button @click="changeData3">修改data3</button>
<button @click="changetotal">修改total</button>
</div>
</template>
<script setup lang="ts">
import { computed, ref } from 'vue'
let data1 = ref(1)
let data2 = ref(5)
let data3 = ref({ a: 10 })
const total = computed({
get () {
let count = data1.value + data2.value + data3.value.a
return count > 20 ? 0 : count
},
set(newValue) {
data1.value = newValue
data2.value = newValue
data3.value.a = newValue
}
})
const changeData1 = () => {
data1.value++
}
const changeData2 = () => {
data2.value += 2
}
const changeData3 = () => {
data3.value.a += 3
}
const changetotal = () => {
total.value = 100
}
</script>
