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

React使用Object.map传递props时保留对象键名的实现方案

解决方案

不需要用JSON.stringify拼接字符串再转对象这种低效方案,直接用ES6的计算属性名语法,遍历的时候动态构造目标结构即可,没有任何额外转换开销。

修改后的渲染代码:

return (
    <div className='menud'>
        {obj["root"] !== undefined ?
            Object.entries(obj).map(([key, menuItems]) => 
            <MenuList 
                // 动态构造 { [当前键名]: 对应菜单数组 } 的结构
                menuArray={{ [key]: menuItems }}
                key={key} 
                menuKey={key} 
                pcbClick={handleItemClick} 
            />)
            : null
        }
    </div>
);

原理说明

{ [key]: menuItems }是ES6标准的对象计算属性写法:

  • 方括号包裹的变量key会被自动求值,作为生成对象的键名
  • 键对应的值就是当前遍历拿到的菜单数组menuItems
  • 整个过程是原生JS对象操作,没有序列化/反序列化的性能损耗,代码也更简洁易维护。

可选优化

你当前写的obj["root"] !== undefined判断是非必要的:如果obj.root不存在,Object.entries(obj)遍历本身就不会返回root对应的条目,不会触发渲染报错,代码可以进一步简化:

return (
    <div className='menud'>
        {Object.entries(obj).map(([key, menuItems]) => 
            <MenuList 
                menuArray={{ [key]: menuItems }}
                key={key} 
                menuKey={key} 
                pcbClick={handleItemClick} 
            />
        )}
    </div>
);

如果你的业务逻辑要求必须存在root字段才渲染整个菜单区块,保留原有判断即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:39:10