当前位置:首页 > VUE

vue实现computed

2026-03-27 21:08:49VUE

computed 的基本用法

在 Vue 中,computed 是一种基于响应式依赖进行缓存的属性。它适用于需要根据其他数据动态计算的场景。computed 属性只有在依赖的响应式数据发生变化时才会重新计算。

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

computed 的 setter 和 getter

computed 属性默认只有 getter,但也可以提供 setter 以实现双向绑定功能。

vue实现computed

export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName: {
      get() {
        return `${this.firstName} ${this.lastName}`
      },
      set(newValue) {
        const names = newValue.split(' ')
        this.firstName = names[0]
        this.lastName = names[1] || ''
      }
    }
  }
}

computed 与 methods 的区别

computed 属性是基于它们的响应式依赖进行缓存的,只有在依赖发生变化时才会重新计算。而 methods 在每次调用时都会执行函数。

export default {
  data() {
    return {
      counter: 0
    }
  },
  computed: {
    computedCount() {
      return this.counter * 2
    }
  },
  methods: {
    methodCount() {
      return this.counter * 2
    }
  }
}

computed 在 Composition API 中的使用

在 Vue 3 的 Composition API 中,computed 是通过 computed 函数来实现的。

vue实现computed

import { ref, computed } from 'vue'

export default {
  setup() {
    const firstName = ref('John')
    const lastName = ref('Doe')

    const fullName = computed(() => {
      return `${firstName.value} ${lastName.value}`
    })

    return {
      firstName,
      lastName,
      fullName
    }
  }
}

computed 的依赖追踪

computed 属性会自动追踪其依赖的响应式数据。如果依赖的数据没有变化,computed 属性会直接返回缓存的值,而不会重新计算。

export default {
  data() {
    return {
      a: 1,
      b: 2
    }
  },
  computed: {
    sum() {
      return this.a + this.b
    }
  }
}

computed 的异步操作

虽然 computed 属性通常用于同步计算,但也可以通过返回 Promise 来处理异步操作。不过需要注意,这种情况下可能需要结合其他 API(如 async/await)来处理。

export default {
  data() {
    return {
      userId: 1
    }
  },
  computed: {
    userData() {
      return fetch(`https://api.example.com/users/${this.userId}`)
        .then(response => response.json())
    }
  }
}

标签: vuecomputed
分享给朋友:

相关文章

vue实现toast

vue实现toast

Vue 实现 Toast 的方法 使用第三方库(推荐) 对于快速实现 Toast 功能,推荐使用成熟的第三方库如 vue-toastification 或 vant 的 Toast 组件。 安装 v…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue实现swipe

vue实现swipe

Vue实现Swipe功能的方法 使用第三方库(推荐) Vue生态中有多个成熟的轮播/滑动组件库,例如vue-awesome-swiper或swiper/vue。以下是基于swiper/vue的实现示例…

vue实现dag

vue实现dag

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

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue实现rgb调色

vue实现rgb调色

Vue实现RGB调色功能 实现思路 通过Vue的数据绑定和事件处理,动态调整RGB三个通道的值,实时更新显示颜色。 核心代码示例 <template> <div class=…