当前位置:首页 > VUE

vue computed 实现

2026-01-12 11:10:55VUE

Vue computed 实现原理

Vue 的 computed 属性是基于响应式依赖进行缓存的计算属性,其核心实现依赖于 Vue 的响应式系统和 Watcher 机制。

基本用法

在 Vue 组件中定义 computed 属性:

new Vue({
  data: {
    firstName: '张',
    lastName: '三'
  },
  computed: {
    fullName() {
      return this.firstName + ' ' + this.lastName
    }
  }
})

实现机制

computed 属性通过 Object.defineProperty 被定义到组件实例上,每个 computed 属性都会创建一个对应的 Watcher 实例。

初始化阶段会为 computed 属性创建 getter 函数,这个 getter 会在首次访问 computed 属性时执行,并将结果缓存起来。

依赖收集

当 computed 属性的 getter 函数执行时,会访问响应式数据,触发这些数据的 getter,从而完成依赖收集。

computed 属性会记住它所依赖的所有响应式属性,只有当这些依赖发生变化时,才会重新计算。

缓存机制

computed 属性具有缓存特性,只有在其依赖的响应式属性发生变化时才会重新计算,否则直接返回缓存的值。

这种机制避免了不必要的计算,提高了性能。

与 methods 的区别

computed 属性是基于它们的响应式依赖进行缓存的,而 methods 方法每次调用都会执行函数。

computed 适合用在需要基于现有数据计算新值的场景,methods 适合用在需要执行操作的场景。

计算属性的 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] || ''
    }
  }
}

注意事项

避免在 computed 属性中执行异步操作或产生副作用,computed 应该是纯函数。

对于复杂计算,可以考虑将计算逻辑拆分到多个 computed 属性中,提高可维护性。

vue computed 实现

标签: vuecomputed
分享给朋友:

相关文章

vue实现预约页面

vue实现预约页面

Vue 预约页面实现步骤 准备工作 安装Vue CLI创建项目,确保已配置好开发环境。使用vue create appointment-page初始化项目,选择默认配置或手动配置。 页面结构设计 在…

vue 页签实现

vue 页签实现

Vue 页签实现方法 在 Vue 中实现页签功能通常涉及动态组件、路由或状态管理。以下是几种常见的实现方式: 使用动态组件 通过 Vue 的 <component> 动态组件结合 v-f…

vue按钮实现截屏

vue按钮实现截屏

Vue 按钮实现截屏的方法 在 Vue 项目中实现截屏功能可以通过多种方式完成,以下是几种常见的方法: 使用 html2canvas 库 安装 html2canvas 库: npm insta…

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提…

vue中实现显示和隐藏

vue中实现显示和隐藏

控制显示与隐藏的方法 在Vue中实现元素的显示和隐藏可以通过多种方式完成,以下是常见的几种方法: 1. 使用v-if指令v-if根据条件动态添加或移除DOM元素,适合需要频繁切换的场景。当条件为f…

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…