前端 vue3 中的 computed 计算属性

computed原理

computed属性是Vue3中的一个响应式计算属性,它可以根据其他响应式数据的变化而自动更新其自身的值。computed属性通常用于处理需要根据其他响应式数据计算得出的值的情况,例如过滤和排序、数组计算等。computed属性的原理是使用一个getter函数和一个setter函数来实现。

computed函数式写法:只能支持一个getter函数,不允许修改值

<template>
  姓:<input v-model="firstName" type="text"></input>
  名:<input v-model="lastName" type="text"></input>
  <div>全名:{{ name }}</div>
</template>
 
<script setup lang="ts">
import { ref, computed } from 'vue'
const firstName = ref('张')
const lastName = ref('三')
 
// 2. 函数式写法 只能支持一个getter函数,不允许修改值
const name = computed(() => { 
  return firstName.value + '-' + lastName.value
})
</script>

输入框中输入文字,全名会变(全名 = 姓 + 名)

在这里插入图片描述

使用函数式写法时,属性值为只读的,当想要改变数值时,会报错

在这里插入图片描述

computed选项式写法:支持一个对象传入get函数和set函数自定义操作

<template>
  姓:<input v-model="firstName" type="text"></input>
  名:<input v-model="lastName" type="text"></input>
  <div>全名:{{ name }}</div>
  <button @click="changeName">测试computed</button>
</template>
 
<script setup lang="ts">
import { ref, computed } from 'vue'
const firstName = ref('张')
const lastName = ref('三')
 
// 1. 选项式写法 支持一个对象传入get函数和set函数自定义操作
const name = computed<string>({
  // 读取值
  get() {
    return firstName.value + '-' + lastName.value
  },
  // 写入值
  set(newVal) {
    console.log(newVal); // 李-四
    [firstName.value, lastName.value] = newVal.split('-') // 解构赋值
  }
})
const changeName = () => {
  name.value = '李-四'
}
</script>
<style scoped></style>

在输入框中输入文字,全名会变(全名 = 姓 + 名)

在这里插入图片描述
当点击测试computed之后, set 中接收改变的值,然后赋值给自己想要的属性。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值