当前位置:首页 > VUE

vue实现computed

2026-03-07 11:15:19VUE

Vue 中实现 computed 计算属性

在 Vue 中,computed 是一种基于响应式依赖进行缓存的属性,适用于需要复杂逻辑计算的场景。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 来实现双向绑定:

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 或方法。

vue实现computed

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

标签: vuecomputed
分享给朋友:

相关文章

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-m…

vue监听实现

vue监听实现

Vue 监听实现方法 在 Vue 中可以通过多种方式实现监听数据变化或事件触发,以下是常见的几种方法: 使用 watch 选项 watch 是 Vue 提供的核心功能之一,用于观察和响应 Vue 实…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…

vue核心实现

vue核心实现

Vue 核心实现原理 Vue.js 的核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现原理的详细说明: 响应式系统 Vue 使用 Object.defineProper…

vue实现登录退出

vue实现登录退出

实现登录功能 在Vue中实现登录功能通常需要结合表单验证、API请求和状态管理。以下是一个基础实现示例: 安装必要依赖(如axios和vuex): npm install axios vuex 创…

vue实现穿梭框

vue实现穿梭框

Vue 穿梭框实现方法 穿梭框(Transfer)是一种常见的UI组件,用于在两个列表之间移动数据项。以下是基于Vue的实现方法。 基础结构搭建 创建两个列表容器和一个操作按钮区域,使用v-mode…