computed列表过滤技巧分享
时间:2026-04-16 17:25:33 177浏览 收藏
本文深入解析了如何利用 Vue 的 computed 属性高效实现列表搜索过滤,强调其响应式、简洁、无须手动防抖的核心优势;通过将原始数据与搜索关键词作为依赖,Vue 自动追踪变化并惰性更新结果,配合多字段模糊匹配、空值防护、空搜索优化及 v-memo 渲染加速等技巧,即使面对万级列表也能保持流畅体验,是前端本地搜索场景下兼顾性能与可维护性的最佳实践。

用 computed 做列表搜索过滤,核心就一点:把“原始数据”和“搜索关键词”作为响应式依赖,让 Vue 自动追踪变化、重新计算过滤后结果——不用手动调用方法,也不用 watch 监听,简洁又高效。
基础写法:一个输入框 + computed 过滤
假设你有商品列表 goodsList,用户在 searchKey 输入关键词:
- 在 data 中定义
searchKey: '' - 在 computed 中写一个过滤后的列表,比如
filteredGoods - 模板里直接遍历
filteredGoods,而不是原始列表
示例代码:
computed: {filteredGoods() {
return this.goodsList.filter(item =>
item.name.toLowerCase().includes(this.searchKey.toLowerCase())
);
}
}
支持多字段模糊匹配(标题、描述、分类)
用户搜“苹果”,可能想匹配商品名、副标题或所属分类。只需扩展 filter 条件:
- 用
||连接多个字段的 includes 判断 - 统一转小写避免大小写敏感问题
- 加空值判断防止 item.desc 为 undefined 报错
例如:
item.name?.toLowerCase().includes(key) ||item.desc?.toLowerCase().includes(key) ||
item.category?.toLowerCase().includes(key)
防抖不是 computed 的事,但得配合好
computed 本身是响应式计算,不处理输入频率。如果搜索接口要发请求,防抖放 input 的 @input 或 @keyup 里;但如果只是前端过滤,不需要防抖——Vue 的 computed 是惰性求值,输入频繁也不会重复执行,只有依赖变化且被模板引用时才更新。
- 纯前端过滤:直接用 computed,轻量无压力
- 需要调接口查后端:在 methods 里写防抖函数,搜索关键词变化后触发请求,再更新本地 list
- 两者混用常见场景:先 computed 过滤已有数据,再加个“搜不到?去全网找”按钮触发远程搜索
性能优化小技巧(万级列表也不卡)
列表超过 5000 条时,filter 可能有感知延迟。可加两层优化:
- 用
computed+v-memo(Vue 3.2+):给 v-for 加 memo,跳过未变化项的重渲染 - 搜索为空时,直接返回原数组引用(避免无谓 filter)
- 复杂逻辑可抽成函数,但别在 computed 里做副作用(如 console.log、修改 data)
例如:
filteredGoods() {if (!this.searchKey.trim()) return this.goodsList;
// 否则执行 filter
}
终于介绍完啦!小伙伴们,这篇关于《computed列表过滤技巧分享》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!
相关阅读
更多>
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
最新阅读
更多>
-
309 收藏
-
135 收藏