计算属性命名应为小驼峰动词+名词结构,如iseligiblefordiscount;函数体须为纯函数,只读依赖并必须return;依赖需显式最小化;可写计算属性的set必须反向更新响应式源。

命名要见名知意,用驼峰式动词+名词结构
计算属性名应清晰表达“它算出来的是什么”,避免缩写或模糊词。比如 userFullName 比 nameStr 明确,isEligibleForDiscount 比 canDiscount 更准确反映判断逻辑。首词用动词(is/has/can/computed)或形容词(active、filtered、sorted)开头,后续接核心名词,全部小驼峰。不加 c、computed、calc 等冗余前缀——Vue 里声明即知是计算属性。
函数体必须是纯函数:无副作用、只读依赖、有明确 return
计算属性的 getter 函数体内不能修改任何响应式数据、不调用 API、不操作 DOM、不触发事件。它只能读取依赖项(ref.value 或 reactive 的属性),做同步计算,并 必须 return 一个值。例如:
- ✅ 正确:
computed(() => user.value.age > 18) - ❌ 错误:
computed(() => { console.log('check'); return user.value.age > 18 })(log 是副作用) - ❌ 错误:
computed(() => { user.value.status = 'active'; return true })(修改了依赖源)
依赖必须显式、最小化,禁止隐式访问或 this 上下文
所有被读取的响应式数据,必须在函数体内以 .value 或点属性方式直接出现。不能通过中间变量间接引用,也不能依赖未声明的 this 或闭包外变量(组合式 API 中 this 不可用)。例如:
- ✅ 显式依赖:
const total = computed(() => cartItems.value.reduce((s, i) => s + i.price * i.qty, 0)) - ❌ 隐式依赖:
const items = cartItems.value; computed(() => items.reduce(...))(Vue 无法追踪 items 变化)
可写计算属性需严格配对 get/set,且 set 必须反向更新源数据
仅在确实需要双向绑定(如 v-model 绑定复合字段)时才用对象式写法。get 和 set 必须逻辑自洽:set 接收的值应能完整还原为所依赖的源字段。例如:
- ✅ 合理:
fullName: computed({ get: () => `${firstName.value} ${lastName.value}`, set: (v) => { const [f, l] = v.split(' '); firstName.value = f; lastName.value = l || ''; }}) - ❌ 危险:
set: (v) => { localStorage.setItem('name', v); }(未更新响应式源,破坏响应链)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










