一、computed 的核心设计哲学(道)
1. 声明式推导替代命令式更新
- 声明式编程让开发者只需描述"想要什么",Vue 自动维护从依赖追踪到视图更新的全链路。
2. 纯计算与状态隔离
computed 强调无副作用的纯计算,保持状态修改与状态计算的清晰分离。
3. 高效缓存与最小化更新
- 只有当依赖变化时,
computed 才会重新计算结果,极大地提升了性能。
二、从设计哲学推导的常用"术"(用法)
1. 单一状态派生
复制代码
const username = ref('zhangsan');
const upperUsername = computed(() => username.value.toUpperCase());
2. 复合状态派生
复制代码
const totalPrice = computed(() => {
const sum = goods.reduce((acc, item) => acc + item.price * item.count, 0);
return Math.max(sum - coupon.value, 0);
});
3. 映射全局状态
复制代码
const userInfo = computed(() => `${userStore.name}(${userStore.age}岁)`);
4. 双向推导
复制代码
const allChecked = computed({
get() { return list.every(item => item.checked); },
set(value) { list.forEach(item => item.checked = value); }
});
5. 过滤/排序派生数据
复制代码
const filteredGoods = computed(() => goodsList.value.filter(item =>
item.name.includes(searchKeyword.value)
));
6. 状态合法性校验
复制代码
const isPhoneValid = computed(() => /^1[3-9]\d{9}$/.test(form.phone));