vue3 计算属性(computed)

在 Vue 3 中,计算属性(Computed)是一种基于响应式依赖进行计算并返回结果的功能。它的特点是具有缓存性,即当依赖的响应式状态没有发生变化时,计算属性不会重新计算,从而提高性能。

与vue2不同点:

计算属性在vue3中是以一个方法的形式存在,需要使用时要进行导入再使用

下面我将以普通使用和get、set方式使用来进行举例:

1、普通使用

<template>
    <div>
        总价: {{ count }}
    </div>
</template>

<script setup>
import { computed, reactive } from 'vue';

    let goods=reactive([
        {title:'毛巾',price:20,count:2},
        {title:'笔记本',price:20,count:3},
        {title:'笔',price:2,count:4},
    ])

    const count=computed(()=>{
        return goods.reduce((pre,cur)=>pre+cur.price*cur.count,0)
    })
</script>

2、get/set方法使用

注意点:数据修改时要注意数据地址是否改变,会影响到数据是否能在页面上双向绑定

<template>
  <div>
    <table border="1">
      <tr>
        <th><input type="checkbox" v-model="selectAll" />全选/全不选</th>
        <th>id</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
      </tr>
      <tr v-for="(item, index) in user" :key="item.id">
        <td><input type="checkbox" v-model="checkList[index]" /></td>
        <td>{{ item.id }}</td>
        <td>{{ item.name }}</td>
        <td>{{ item.age }}</td>
        <td>{{ item.gender }}</td>
      </tr>
    </table>
  </div>
</template>

<script setup>
import { reactive, computed, onMounted,toRefs } from "vue";
let data = reactive({
  user: [
    { id: 1, name: "张三", age: 20, gender: "男" },
    { id: 2, name: "李四", age: 30, gender: "中性" },
    { id: 3, name: "王五", age: 40, gender: "女" },
    { id: 4, name: "老六", age: 50, gender: "未知" },
  ],
  checkList: [],
});
// 解构
const {user,checkList}=toRefs(data)
// 构造数据
onMounted(() => {
    data.checkList=data.user.map(() => false);
});
// 全选/全不选
let selectAll = computed({
  get() {
    return !data.checkList.includes(false);
  },
  set(val) {
    data.checkList=data.checkList.map(()=>val)
  },
});
</script>

<style lang="scss" scoped>
table {
  width: 700px;
  border-collapse: collapse;
}
</style>

 

 

### Vue3 中 `computed` 计算属性的使用方法 在 Vue 3 中,`computed` 是一种用于定义计算属性的强大工具。它允许开发者以声明式的方式处理响应式数据的复杂逻辑或转换操作[^1]。计算属性的核心特性在于它的 **惰性求值** 和 **缓存机制**,这意味着只有当其依赖的数据发生改变时,计算属性才会被重新评估。 以下是关于如何在 Vue 3 中使用 `computed` 属性的具体说明以及代码示例: #### 基本语法 计算属性可以通过两种方式实现:选项式 API 或组合式 API (Composition API)。下面分别介绍这两种情况下的写法。 ##### 选项式 API 示例 如果使用的是传统的选项式 API,则可以直接在组件的 `computed` 配置项中定义计算属性[^2]。 ```javascript export default { data() { return { firstName: &#39;John&#39;, lastName: &#39;Doe&#39; }; }, computed: { fullName() { // 定义一个名为fullName的计算属性 return `${this.firstName} ${this.lastName}`; } } }; ``` 在这个例子中,`fullName` 是一个计算属性,它会自动追踪 `firstName` 和 `lastName` 的变化,并返回更新后的全名字符串。 ##### 组合式 API 示例 对于现代项目推荐使用的 Composition API,可以借助 `ref` 来管理状态变量,并通过 `computed` 函数来创建计算属性[^3]。 ```javascript import { ref, computed } from &#39;vue&#39;; export default { setup() { const firstName = ref(&#39;Jane&#39;); const lastName = ref(&#39;Smith&#39;); const fullName = computed(() => { return `${firstName.value} ${lastName.value}`; }); return { firstName, lastName, fullName }; } }; ``` 在此案例里,我们利用了 `ref` 创建两个可变的状态变量 (`firstName`, `lastName`) 并将其绑定到视图上;接着用 `computed` 构建了一个只读版本的 `fullName` 属性,该属性会在任何基础字段变动时动态调整显示的内容。 #### 在模板中的调用 无论采用哪种形式编写计算属性,在 HTML 模板内的访问都非常简单直观。只需像普通对象成员一样引用即可。 ```html <template> <div> <!-- 调用计算属性 --> Full Name: {{ fullName }} <!-- 修改原始数据 --> First Name: <input v-model="firstName"> Last Name: <input v-model="lastName"> </div> </template> ``` 上述片段展示了如何将输入框与模型关联起来同步修改源数据的同时触发相应计算属性的变化效果。 --- ### 总结 综上所述,Vue 3 提供了灵活多样的途径去运用 `computed` 功能简化业务场景下频繁涉及的操作流程。无论是传统还是新型开发模式都能很好地支持这一特性的引入并发挥巨大作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值