当前位置:首页 > VUE

vue computed 实现

2026-02-10 00:14:04VUE

Vue computed 实现原理

Vue 的 computed 属性是基于响应式依赖进行缓存的,当依赖的响应式数据发生变化时,computed 属性会重新计算,否则直接返回缓存值。

基本用法

在 Vue 组件中定义 computed 属性:

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

计算属性 vs 方法

计算属性会缓存结果,只有依赖的响应式数据变化时才会重新计算。方法每次调用都会执行函数体:

methods: {
  getFullName() {
    return this.firstName + ' ' + this.lastName
  }
}

计算属性的 setter

计算属性默认只有 getter,也可以提供 setter:

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

实现原理分析

Vue 内部通过 Object.defineProperty 或 Proxy 实现计算属性:

vue computed 实现

  1. 初始化阶段收集计算属性的依赖
  2. 建立计算属性和依赖数据的关联
  3. 依赖变化时触发计算属性重新计算
  4. 计算结果缓存,避免重复计算

注意事项

计算属性应只包含同步操作,异步操作应使用 watch 或 methods 避免在计算属性中产生副作用(如修改其他数据) 计算属性依赖的数据必须是响应式的

标签: vuecomputed
分享给朋友:

相关文章

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue实现登出

vue实现登出

实现Vue登出功能 登出功能通常涉及清除用户会话、令牌或本地存储的数据,并重定向到登录页面。以下是几种常见的实现方式: 清除用户令牌和状态 在Vuex的store中定义一个logout mutati…

vue监听实现

vue监听实现

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

vue核心实现

vue核心实现

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

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…

vue实现模糊

vue实现模糊

Vue实现模糊搜索的方法 在Vue中实现模糊搜索功能通常需要结合输入框和列表渲染,通过监听输入内容动态过滤数据。以下是几种常见实现方式: 使用计算属性实现 计算属性适合处理需要响应式更新的搜索逻辑:…