当前位置:首页 > VUE

computed vue 实现

2026-03-27 12:43:51VUE

computed 的基本用法

在 Vue 中,computed 用于声明计算属性,基于响应式依赖进行缓存。只有当依赖发生变化时才会重新计算。

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

getter 和 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] || ''
    }
  }
}

计算属性缓存

计算属性会基于它们的响应式依赖进行缓存。只有在依赖发生变化时才会重新计算。

computed: {
  now() {
    return Date.now()  // 不会更新,因为不是响应式依赖
  }
}

与方法的区别

方法每次调用都会执行函数,而计算属性会缓存结果。

methods: {
  getFullName() {
    return this.firstName + ' ' + this.lastName  // 每次调用都会执行
  }
},
computed: {
  fullName() {
    return this.firstName + ' ' + this.lastName  // 依赖不变时返回缓存
  }
}

在组合式 API 中使用

Vue 3 的组合式 API 中使用 computed 需要从 vue 导入。

import { ref, computed } from 'vue'

const firstName = ref('张')
const lastName = ref('三')

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

计算属性调试

可以给计算属性添加 onTrackonTrigger 选项来调试。

const fullName = computed({
  get() {
    return firstName.value + ' ' + lastName.value
  },
  set(newValue) {
    [firstName.value, lastName.value] = newValue.split(' ')
  },
  onTrack() {
    console.log('fullName 被追踪')
  },
  onTrigger() {
    console.log('fullName 被触发')
  }
})

计算属性与侦听器

计算属性适合用于派生状态,而侦听器适合在状态变化时执行异步或开销较大的操作。

computed vue 实现

watch(fullName, (newVal, oldVal) => {
  console.log(`全名从 ${oldVal} 变为 ${newVal}`)
})

计算属性的性能优化

避免在计算属性中进行复杂的计算或循环操作。对于大型列表,考虑使用分页或虚拟滚动。

标签: computedvue
分享给朋友:

相关文章

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。…

vue SSG实现

vue SSG实现

Vue SSG 实现方法 Vue 的静态站点生成(SSG)可以通过多种工具和框架实现,以下是几种常见的方法: 使用 VuePress VuePress 是一个基于 Vue 的静态站点生成器,适合文档…

vue实现试卷

vue实现试卷

Vue实现试卷系统的基本思路 使用Vue.js构建试卷系统需要结合组件化开发、状态管理和后端数据交互。核心功能包括题目展示、答题逻辑、计时器和提交答案。 核心功能模块划分 试卷组件结构 试卷容器组…

vue 实现视频

vue 实现视频

Vue 实现视频播放功能 使用 Vue 实现视频播放功能可以通过 HTML5 的 <video> 标签或第三方库(如 video.js)来实现。以下是两种常见的方法: 使用 HTML5…

vue实现购票

vue实现购票

Vue 实现购票功能 数据结构设计 购票功能通常需要以下数据结构: 场次信息(时间、地点、价格) 座位信息(可选座位、已售座位) 用户订单信息 示例数据结构: data() { return…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…