如何一次性处理groupBy生成的对象并动态渲染产品选项组件?
动态渲染分组后的产品选项组件
你的原始分组数据:
const productOptions = { color: [ { id: 1, type: "color", name: "red" }, { id: 2, type: "color", name: "orange" }, { id: 3, type: "color", name: "yellow" }, ], size: [ { id: 4, type: "size", name: "sm" }, { id: 5, type: "size", name: "md" }, { id: 6, type: "size", name: "lg" }, { id: 7, type: "size", name: "xl" }, ], };
之前的硬编码写法:
<ProductOption productOptionType={"color"} productOptions={productOptions.color} /> <ProductOption productOptionType={"size"} productOptions={productOptions.size} />
核心解决方案:用Object.entries()遍历对象
Object.entries()会将对象转换为键值对数组,能同时获取类型(键)和对应的数据列表(值),完全适配动态渲染需求,且可以直接在JSX中结合.map()使用:
{Object.entries(productOptions).map(([optionType, options]) => ( <ProductOption key={optionType} productOptionType={optionType} productOptions={options} /> ))}
可选优化:固定渲染顺序
如果后续新增类型后需要保证固定的展示顺序,可以先定义顺序数组,再按数组遍历取值:
// 自定义渲染顺序,新增类型时只需在这里添加 const optionDisplayOrder = ['color', 'size', 'weight', 'accessory']; // 按顺序渲染,自动过滤未定义的类型 {optionDisplayOrder.map(optionType => { const options = productOptions[optionType]; if (!options) return null; return ( <ProductOption key={optionType} productOptionType={optionType} productOptions={options} /> ); })}
为什么不推荐for-in?
for-in会遍历对象原型链上的属性,容易出现意外值;且在React JSX中无法直接使用循环语句,需要先手动组装渲染数组,代码冗余度远高于Object.entries()。
内容的提问来源于stack exchange,提问作者tetthys
相关产品推荐
相关产品推荐

