当前位置:首页 > VUE

vue实现computed

2026-01-08 00:11:51VUE

Vue 中 computed 的实现原理

computed 属性是 Vue 的一个核心特性,它基于响应式依赖进行缓存,仅在依赖发生变化时重新计算。以下是 computed 的实现方式:

基本用法

在 Vue 组件中定义 computed 属性:

export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName() {
      return this.firstName + ' ' + this.lastName
    }
  }
}

实现机制

computed 属性通过以下方式工作:

  • 每个 computed 属性会被转换为一个 getter 函数
  • Vue 会为 computed 属性创建一个 watcher 实例
  • 当首次访问 computed 属性时,会执行计算并缓存结果
  • 只有当依赖的响应式数据变化时,才会重新计算

与 methods 的区别

computed 属性与方法的主要区别在于缓存机制:

methods: {
  getFullName() {
    return this.firstName + ' ' + this.lastName
  }
}
  • computed 属性会缓存结果,只有依赖变化才重新计算
  • 方法每次调用都会执行函数体

计算属性 setter

computed 属性也可以定义 setter:

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

在 Composition API 中使用

Vue 3 的 Composition API 提供了 computed 函数:

import { ref, computed } from 'vue'

const firstName = ref('John')
const lastName = ref('Doe')

const fullName = computed(() => {
  return firstName.value + ' ' + lastName.value
})

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

性能优化建议

  • 对于复杂计算,优先使用 computed 而非 methods
  • 避免在 computed 中执行副作用操作
  • 对于不依赖响应式数据的计算,使用普通函数更高效
  • 大型项目可考虑使用 memoization 技术进一步优化

vue实现computed

标签: vuecomputed
分享给朋友:

相关文章

vue实现验证码

vue实现验证码

Vue 实现验证码的方法 使用第三方库 安装 vue-captcha 或 vue-recaptcha 等第三方库,这些库提供了现成的验证码组件,可以直接集成到 Vue 项目中。以 vue-recapt…

vue实现评论

vue实现评论

Vue 实现评论功能的方法 基础评论组件结构 使用 Vue 单文件组件(SFC)构建评论功能的核心结构。模板部分包含评论输入框和评论列表,脚本部分处理数据绑定和逻辑。 <template>…

vue实现tab标签

vue实现tab标签

Vue 实现 Tab 标签的方法 使用动态组件和 v-for 渲染标签 通过 v-for 循环生成标签页标题,结合 v-bind:class 动态切换激活状态。使用 v-show 或动态组件 <…

vue实现年历

vue实现年历

Vue 实现年历的方法 使用 Vue 实现年历可以通过组件化开发方式,结合日期计算和动态渲染完成。以下是两种常见的实现方式: 基于原生 Vue 的日历组件 创建 Calendar.vue 组件文件…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框…

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debo…