Vue3.x+TS+组合API Computed()

历史文章目录连接:

https://blog.csdn.net/yy763496668/article/details/113117040

此链接为CSDN连接,目的为方便大家一览博客目录!内容会定期更新。

微信公众号:猿媛大本营

概述:

本文记录如果数据比较复杂,一些数据要依赖于其他数据的变化并进行一些规则处理而变化时的问题

正文:

watch和watchEffect可以解决一些数据要依赖于其他数据的变化并进行一些规则处理而变化时的问题,但是watch和watchEffect监听了数据的变化。在某些逻辑中,我们只关心数据在变化,不关心变化前与变化后的结果,那么我们就可以选择computed().

computed()和computed选项作用一样的,都是用于创建依赖于其他状态的计算属性。该方法接收一个getter函数,并为getter返回的值返回一个不可变的响应式ref对象。

请看下面的例子:

一个加法计算器

<template>
  <input type="text" placeholder=" 被加数" v-model='firstNumber' > + <input type="text" placeholder="加数" v-model='secondNumber' > = <input type="text" placeholder="和" v-model='sum'>
  <p>{{sum}}</p>
  <p>{{sum}}</p>
</template>


<script lang="ts">
import { ref, defineComponent, watchEffect, computed } from 'vue'
export default defineComponent({
  name: 'HelloWorld',
  setup: () => {
    const firstNumber = ref(0);
    const secondNumber = ref(0);
    const sum = computed(()=>{
      return Number(firstNumber.value) + Number(secondNumber.value);
    });
    return {firstNumber,secondNumber,sum}
  },
  
  
})
</script>


<style scoped>
a {
  color: #42b983;
}


label {
  margin: 0 0.5em;
  font-weight: bold;
}


code {
  background-color: #eee;
  padding: 2px 4px;
  border-radius: 4px;
  color: #304455;
}
</style>


computed 内部不仅有getter(),还有一个setter(),但是写法可能略微不同

<template>
  <input type="text" placeholder=" 被加数" v-model='firstNumber' > + <input type="text" placeholder="加数" v-model='secondNumber' > = <input type="text" placeholder="和" v-model='sum'>
  <p>{{sum}}</p>
  <p>{{sum}}</p>
</template>


<script lang="ts">
import { ref, defineComponent, watchEffect, computed } from 'vue'
export default defineComponent({
  name: 'HelloWorld',
  setup: () => {
    const firstNumber = ref(0);
    const secondNumber = ref(0);
    const sum = computed({
        get(){
          return Number(firstNumber.value) + Number(secondNumber.value);
        },
        set(val:number){
          firstNumber.value = val*0.8;
          secondNumber.value = val * 0.2;
        }
      }
    );
    return {firstNumber,secondNumber,sum}
  },
})
</script>


<style scoped>
a {
  color: #42b983;
}


label {
  margin: 0 0.5em;
  font-weight: bold;
}


code {
  background-color: #eee;
  padding: 2px 4px;
  border-radius: 4px;
  color: #304455;
}
</style>


在上一个案例中computed() 中有一个对象,对象包含get()和set() 方法,set()具有参数,参数为设置的新值在“和”的输入框中输入结果,那么“被加数”和“加数”就会按比例分掉“和”。

计算属性是基于它们的响应依赖关系缓存的,也就是说,计算属性只在相关响应式依赖发生改变时它们才会重新求值。如果依赖关系没有发生改变,多次访问 sum 计算属性会立即返回之前的计算结果,而不必再次执行函数.

【文章导航】

https://blog.csdn.net/yy763496668/article/details/113117040

THANKS ALL !!

【关注、点赞,收藏】

关注公众号,您将第一时间收到文章更新

微信公众号:猿媛大本营

QQ群号:1056320746

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yy763496668

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值