vue 3 的 computed 是处理多条件联合筛选最自然高效的方式,应统一用一个 filteredlist 计算属性整合搜索关键词、状态、分类、时间范围、复选框等所有条件,空值跳过、大小写归一、日期转对象、多字段模糊搜索、链式排序。

Vue 3 的 computed 是处理多条件联合筛选最自然、高效的方式——它自动追踪所有依赖变化,缓存中间结果,且逻辑集中、模板干净。
把所有筛选条件统一收口到一个计算属性里
不要为每个条件写单独的 computed,也不要分散到多个 methods 中。把搜索关键词、状态选择、分类 ID、时间范围、复选框数组等全部作为依赖,在一个 filteredList 里完成判断和过滤。
- 每个条件都做“空值跳过”处理:比如
!this.searchKey || ...、!this.selectedStatus || product.status === this.selectedStatus - 字符串匹配统一转小写:
item.name.toLowerCase().includes(keyword.toLowerCase()),避免大小写导致漏匹配 - 日期范围比较前转成 Date 对象:
new Date(product.createdAt) >= new Date(this.dateRange.start),防止字符串字典序误判 - 复选框类条件(如地区、标签)用
includes()判断:this.checkedTags.includes(item.tag)
支持多字段模糊搜索(非精确匹配)
用户输入一个关键词,希望同时在名称、描述、SKU、分类名等多个字段中查找,只需用 || 连接各字段的匹配逻辑。
使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……
- 例如:
item.name.includes(keyword) || item.desc?.includes(keyword) || item.sku.includes(keyword) - 注意对可能为
undefined的字段加可选链(?.includes)或先做存在性判断 - 若字段是数字(如 ID),转字符串再查:
item.id.toString().includes(searchId)
筛选后立即排序,不拆分成两个 computed
先筛选、再排序是常见需求。别写 filteredProducts 和 sortedProducts 两个计算属性——这会触发两次遍历,且容易因依赖顺序出错。
- 直接在 filter 后链式调用
.sort():return this.products.filter(...).sort((a, b) => {...}) - 多字段排序可嵌套判断:
if (a.priority !== b.priority) return a.priority > b.priority ? -1 : 1; else return a.createdAt - 注意:
sort()会原地修改数组,但 filter 返回的是新数组,所以不会污染原始数据
大数据量时做简单性能防护
当列表超过千条,频繁重算可能卡顿。可在 computed 内加轻量级节流或最小长度限制。
- 搜索关键词少于 2 个字符时跳过过滤:
if (this.searchKey.length - 对日期范围等高成本操作加守卫:
if (this.dateRange && (this.dateRange.start || this.dateRange.end)) { /* 执行日期判断 */ } - 真有性能瓶颈时,可把核心过滤逻辑抽成纯函数,配合
shallowRef或防抖后的 watch 手动更新,但多数业务场景无需这么复杂
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!









