You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React引入外部JSON文件后商品分类筛选按钮失效解决方案

问题根因

分类筛选失效的核心原因是两侧分类值的格式、大小写完全不匹配,严格相等判断永远不成立:

  • 组件内定义的筛选分类常量是首字母大写、空格分隔的格式,例如const ART = 'Art'、const ACCESSORIES = 'Accessories'
  • JSON数据源中存储的商品category字段是全大写、下划线分隔的格式,例如"category": "ART"、"category": "DIGITAL_PHOTOGRAPHS"
  • 过滤逻辑用的是严格全等匹配product.category === category,两边值不一致自然无法命中筛选规则,只有选择「All」时能正常返回全量商品。
修复方案

二选一即可,推荐用方案1,改动量最小:

方案1:对齐组件侧的分类常量值

直接修改Shop组件顶部的分类常量定义,让常量值和JSON中存储的category值完全一致即可,按钮对外显示的文字不需要调整:

// 替换原有分类常量定义,和JSON字段值完全对齐
const HOME_GARDEN = 'HOME_AND_GARDEN'; // 注意当前JSON中暂无该分类下的商品,后续新增商品时category值要和该常量保持一致
const ART = 'ART';
const ACCESSORIES = 'ACCESSORIES';
const DIGITAL_PHOTOGRAPHS = 'DIGITAL_PHOTOGRAPHS';
const FASHION = 'FASHION';
const FOOTWEAR = 'FOOTWEAR';
const JEWELLERY = 'JEWELLERY';
const ALL = 'All';

方案2:对齐JSON侧的分类值

如果觉得全大写下划线的分类值可读性差,可以批量修改JSON文件中所有商品的category字段值,让其和组件内定义的常量完全对应,例如把"category": "ART"改为"category": "Art","category": "ACCESSORIES"改为"category": "Accessories",所有值一一对应即可。

可选优化建议
  • 当前JSON中有两个商品的id均为0005,会导致后续商品详情页路由跳转异常,建议将Jewellery分类下的项链商品id修改为0006
  • 可以给过滤逻辑增加大小写容错,避免后续因格式写错导致筛选失效,修改后的过滤逻辑如下:
const getProductsInCategory = () => {
if (category === ALL) {
    return products;
} else {
    // 统一转成小写后再匹配,兼容大小写差异
    return products.filter((product) => product.category.toLowerCase() === category.toLowerCase());
}
};

内容的提问来源于stack exchange,提问作者LuminousButter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:30:39