当前位置:首页 > VUE

vue实现computed

2026-03-07 11:15:19VUE

Vue 中实现 computed 计算属性

在 Vue 中,computed 是一种基于响应式依赖进行缓存的属性,适用于需要复杂逻辑计算的场景。computed 会根据依赖的数据自动更新,且只在相关依赖发生改变时才会重新计算。

基本用法

在 Vue 组件中,computed 可以以对象或函数的形式定义:

vue实现computed

export default {
  data() {
    return {
      firstName: '张',
      lastName: '三'
    }
  },
  computed: {
    // 对象形式定义
    fullName: {
      get() {
        return this.firstName + ' ' + this.lastName
      },
      set(newValue) {
        const names = newValue.split(' ')
        this.firstName = names[0]
        this.lastName = names[1] || ''
      }
    },
    // 函数形式定义(仅 getter)
    reversedName() {
      return this.fullName.split('').reverse().join('')
    }
  }
}

计算属性 vs 方法

计算属性是基于它们的响应式依赖进行缓存的,只有在相关依赖发生改变时才会重新求值。相比之下,方法调用总是会在重新渲染时再次执行函数。

// 方法调用会在每次渲染时执行
methods: {
  getReversedName() {
    return this.fullName.split('').reverse().join('')
  }
}
// 计算属性会缓存结果,只有 fullName 变化时才重新计算
computed: {
  reversedName() {
    return this.fullName.split('').reverse().join('')
  }
}

计算属性的 setter

计算属性默认只有 getter,但也可以提供 setter 来实现双向绑定:

vue实现computed

computed: {
  fullName: {
    get() {
      return this.firstName + ' ' + this.lastName
    },
    set(newValue) {
      const names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[1] || ''
    }
  }
}

在组合式 API 中使用 computed

在 Vue 3 的组合式 API 中,使用 computed 函数:

import { ref, computed } from 'vue'

export default {
  setup() {
    const firstName = ref('张')
    const lastName = ref('三')

    // 只读计算属性
    const fullName = computed(() => {
      return firstName.value + ' ' + lastName.value
    })

    // 可写计算属性
    const writableFullName = computed({
      get() {
        return firstName.value + ' ' + lastName.value
      },
      set(newValue) {
        const names = newValue.split(' ')
        firstName.value = names[0]
        lastName.value = names[1] || ''
      }
    })

    return {
      firstName,
      lastName,
      fullName,
      writableFullName
    }
  }
}

计算属性的最佳实践

计算属性适合用于需要复杂逻辑的数据转换,特别是当这个转换需要重复使用时。避免在计算属性中进行异步操作或副作用操作,这些场景更适合使用 watch 或方法。

对于大型项目,可以考虑将复杂的计算逻辑提取到单独的文件中,保持组件的简洁性。

标签: vuecomputed
分享给朋友:

相关文章

vue实现点击旋转轮盘

vue实现点击旋转轮盘

实现点击旋转轮盘效果 在Vue中实现点击旋转轮盘效果,可以通过CSS动画和Vue的数据绑定结合完成。以下是一个完整的实现方案: 准备工作 需要安装Vue.js环境,可以通过CDN引入或使用Vue C…

vue实现autocomplete

vue实现autocomplete

Vue 实现 Autocomplete 功能 Vue 中实现 Autocomplete(自动完成)功能可以通过自定义组件或使用现有库完成。以下是几种常见方法: 方法一:使用 Vue 原生实现 创建…

vue实现通知

vue实现通知

Vue 实现通知功能的方法 使用 Vue 实现通知功能可以通过多种方式实现,以下是一些常见的方法: 使用 Vue 的全局事件总线 在 Vue 中可以通过事件总线实现通知功能。创建一个全局事件总线,然…

vue实现订单

vue实现订单

Vue 实现订单功能 订单数据结构设计 订单数据通常包含以下字段: order: { id: String, // 订单ID userId: String,…

vue实现webapp

vue实现webapp

Vue 实现 WebApp 的基本步骤 环境准备 确保已安装 Node.js 和 npm/yarn。通过 Vue CLI 或 Vite 创建项目: npm install -g @vue/cli v…

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…