Vue3中computed函数的基础使用

computed函数,是用来定义计算属性的,计算属性不能修改

1.基本使用–只读

<template>
  <div>
    <div>计算属性</div>
    <hr>
    <div>今年:{{age}}岁了</div>
    <div>明年:{{nextAge}}岁了</div>
  </div>
</template>

<script>
// 按需导入computed函数
import { ref, computed } from 'vue'

export default {
  name: 'Test',
  setup () {
    // 计算属性:简化模板
    // 应用场景:基于已有的数据,计算一种数据
    const age = ref(18)

    // 计算属性基本使用
    const nextAge = computed(() => {
      // 回调函数必须return,结果就是计算的结果
      // 如果计算属性依赖的数据发生变化,那么会重新计算
      return age.value + 1
    })

    return { age, nextAge }
  }
}
</script>

<style lang="less">
</style>

在这里插入图片描述

总结:Vue3中计算属性也是组合API风格

  1. 回调函数必须return,结果就是计算的结果
  2. 如果计算属性依赖的数据发生变化,那么会重新计算
  3. 不要在计算中进行异步操作

2.高级用法–可读可写

<template>
  <div>
    <div>计算属性</div>
    <hr>
    <button @click='nextAge=28'>点击修改</button>
    <div>今年:{{age}}岁了</div>
    <div>明年:{{nextAge}}岁了</div>
  </div>
</template>

<script>
// 按需导入computed函数
import { ref, computed } from 'vue'

export default {
  name: 'Test',
  setup () {
    // 计算属性:简化模板
    // 应用场景:基于已有的数据,计算一种数据
    const age = ref(18)

    // // 计算属性基本使用
    // const nextAge = computed(() => {
    //   // 回调函数必须return,结果就是计算的结果
    //   // 如果计算属性依赖的数据发生变化,那么会重新计算
    //   return age.value + 1
    // })

    // 修改计算属性的值
    const nextAge = computed({
      get () {
        // 如果读取计算属性的值,默认调用get方法
        return age.value + 1
      },
      set (v) {
        // 如果要想修改计算属性的值,默认调用set方法
        age.value = v - 1
      }
    })

    return { age, nextAge }
  }
}
</script>

<style lang="less">
</style>

在这里插入图片描述

### Vue 3 中 `computed` 函数使用方法 #### 定义与特性 在 Vue 3 中,`computed` 函数用于定义计算属性。这些属性基于其他响应式数据源派生而来,并且只有在其依赖的数据发生改变时才会重新求值[^1]。 #### 基本语法 为了创建一个只读的计算属性,可以传递给 `computed()` 一个不带参数的返回函数作为 getter: ```javascript import { computed, ref } from &#39;vue&#39; const count = ref(1) // 只读计算属性 const plusOne = computed(() => count.value + 1) ``` 对于可写入(即具有 setter 的)计算属性,则需传入一个对象形式的选项,其中包含 `get` 和 `set` 方法: ```javascript const num1 = ref(10); const num2 = computed({ get: () => num1.value + 1, set: (newValue) => { num1.value = newValue - 1; } }); console.log(num2.value); // 输出11 num2.value = 10; // 设置新值后触发setter逻辑 console.log(num1.value); // 输出9 ``` 上述例子展示了如何利用 `ref` 创建基本类型的响应式引用以及怎样通过 `computed` 来操作这些引用并实现双向绑定的效果[^4]。 #### 使用场景举例 假设有一个简单的购物车应用程序,想要实时显示所选商品总价格而无需手动刷新页面。此时就可以借助于 `computed` 属性来轻松达成目的: ```html <template> <div> 商品列表:<ul v-for="item in items" :key="item.id"> <li>{{ item.name }} - {{ item.price }}</li> </ul> 总价:{{ totalPrice }} </div> </template> <script setup> import { reactive, computed } from &#39;vue&#39;; let cartItems = reactive([ { id: 1, name: &#39;苹果&#39;, price: 5 }, { id: 2, name: &#39;香蕉&#39;, price: 3 } ]); const totalPrice = computed(() => cartItems.reduce((acc, cur) => acc + cur.price, 0) ); function addItem(item){ cartItems.push({...item}) } </script> ``` 在这个案例里,每当向购物车内添加新的项目时,由于 `cartItems` 发生变化会促使 `totalPrice` 自动更新其值,从而保持视图同步反映最新的总价信息[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值