SuperAPI AI 工具集

filtering-system

前端与建站

查看项目

更新于 10-16 10:14

技能介绍

用途

这是一个面向 Saleor storefront 代码库的筛选系统技能,用于在以下情况提供指导:修改商品列表的筛选或排序、新增筛选类型、处理分类 / 集合 / 商品页面、理解服务端筛选与客户端筛选的区别。

主要能力与架构

文档将筛选条件划分为两类处理方式:

筛选 处理位置 原因
Categories 服务端 使用 Saleor 的 ProductFilterInput.categories
Price 服务端 使用 Saleor 的 ProductFilterInput.price
Sort 服务端 使用 Saleor 的 ProductOrder
Colors 客户端 Saleor 需要 attribute IDs
Sizes 客户端 同 Colors

关键文件

文件 用途
src/ui/components/plp/filter-utils.ts 所有筛选工具(服务端 + 客户端)
src/ui/components/plp/FilterBar.tsx 筛选 UI(下拉菜单、移动端 sheet)
src/ui/components/plp/useProductFilters.ts 汇总筛选逻辑的 Hook

使用方式

服务端筛选

URL 中的分类 slug 会被解析为 ID。示例代码展示了在 page.tsx(服务端组件)中导入 resolveCategorySlugsToIds 与 buildFilterVariables,从 searchParams 读取分类、解析为 ID、构建 filter 变量,并传入 GraphQL 查询的流程。

客户端筛选

颜色和尺码在数据获取后进行筛选。示例代码展示从 filter-utils 导入 filterProducts 与 extractColorOptions,先提取可用选项,再应用筛选。

使用 Hook

useProductFilters Hook 汇总全部筛选逻辑。示例展示了在客户端组件中调用该 Hook,获取 filteredProducts、colorOptions、sizeOptions、selectedColors、handleColorToggle、handleSortChange、activeFilters 等,并将其传入 FilterBar。

静态价格区间

价格区间是静态的,以避免筛选时 UI 闪烁。示例从 filter-utils 导入 STATIC_PRICE_RANGES_WITH_COUNT,返回形如 { label: "Under $50", value: "0-50", count: 0 } 的数组。

扩展示例

新增服务端筛选:更新 filter-utils.ts 中的 buildFilterVariables,在参数中增加 inStock,并设置 filter.stockAvailability = "IN_STOCK",同时标记 hasFilter;随后在 page.tsx 中从 URL 解析并传入该函数。

反模式

  • 不要客户端筛选分类 —— 应使用服务端配合 ID。
  • 不要生成动态价格区间 —— 应使用静态区间。
  • 不要隐藏已选筛选条件 —— 始终显示,以便用户取消选择。

限制

资料未提供该技能的收费、平台支持范围、性能指标等信息。