登录
首页 >  文章 >  前端

computed列表过滤技巧分享

时间:2026-04-16 17:25:33 177浏览 收藏

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

如何利用 computed 实现列表搜索过滤?电商项目最常用的干货技巧

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学习网公众号也会发布文章相关知识,快来关注吧!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>