vue3计算属性

举报
林欣 发表于 2025/03/10 14:00:05 2025/03/10
【摘要】 在 Vue 3 中,计算属性是一种基于其他属性值动态计算出的属性,其计算结果会被缓存,只有当依赖的属性发生变化时,相关计算才会重新执行。这使得计算属性非常适合处理复杂逻辑或是重复使用的逻辑,而无需在模板中编写过多的代码。 定义计算属性在 Vue 3 组件中,计算属性是在 computed 选项中定义的。下面是一个简单的例子:<template> <div> <p>Original m...

在 Vue 3 中,计算属性是一种基于其他属性值动态计算出的属性,其计算结果会被缓存,只有当依赖的属性发生变化时,相关计算才会重新执行。这使得计算属性非常适合处理复杂逻辑或是重复使用的逻辑,而无需在模板中编写过多的代码。

定义计算属性

在 Vue 3 组件中,计算属性是在 computed 选项中定义的。下面是一个简单的例子:

<template>
  <div>
    <p>Original message: {{ message }}</p>
    <p>Reversed message: {{ reversedMessage }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello Vue 3'
    }
  },
  computed: {
    // 计算属性
    reversedMessage() {
      // 计算属性的值是基于 `message` 的
      return this.message.split('').reverse().join('');
    }
  }
}
</script>

计算属性的特点

  1. 缓存:计算属性会基于其依赖的数据进行缓存,只有当依赖的数据发生变化时才会重新计算。这意味着,如果 message 没有变化,多次访问 reversedMessage 不会触发新的计算。

  2. 声明式:计算属性的使用是声明式的,你只需要定义它们之间的关系,Vue 会负责管理和更新。

  3. 可读:计算属性一般用于读取数据,但它们也可以是可写的(即可以设置 getter 和 setter)。

可写计算属性

如果你需要计算属性既可以读取又可以写入,你可以使用 getter 和 setter。如下例所示:

<template>
  <div>
    <p>Full name: {{ fullName }}</p>
    <input v-model="fullName" placeholder="Enter full name">
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName: {
      // getter
      get() {
        return `${this.firstName} ${this.lastName}`;
      },
      // setter
      set(newValue) {
        const names = newValue.split(' ');
        this.firstName = names[0];
        this.lastName = names[names.length - 1];
      }
    }
  }
}
</script>

在这个例子中,fullName 是一个可写的计算属性。当 fullName 被修改时,setter 会被调用,并更新 firstNamelastName

计算属性 vs 方法

  • 计算属性:适用于基于其他数据计算数据的场景,有缓存机制,适合复杂计算。
  • 方法:用于执行操作或返回计算结果,但每次调用都会执行函数,没有缓存。

选择使用计算属性还是方法,主要取决于你是否需要缓存结果。对于需要频繁访问且计算开销较大的数据,计算属性是更好的选择。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。