如何将对象数组映射输出为Material-UI的MenuItem列表组件
问题原因
- map回调参数使用错误:
Array.prototype.map的第一个入参是当前遍历到的数组元素对象,第二个入参是元素索引,你之前直接写(id, name)无法正确读取对象内的属性 - 属性未正确利用:数组中存储的RGB颜色值没有被用到,
ListItemIcon无实际显示内容
正确实现代码
两种写法都可以,按需选择:
写法1:先取元素对象再解构
{statusColorsArr.map((item) => { const { id, name, colourR, colourG, colourB } = item return ( <MenuItem key={id} value={name} className={classesF.A}> <Checkbox className={classesF.D} /> <ListItemText primary={id} /> <ListItemText primary={name} /> {/* 渲染对应状态色块 */} <ListItemIcon> <div style={{ width: '18px', height: '18px', backgroundColor: `rgb(${colourR},${colourG},${colourB})`, borderRadius: '3px' }} /> </ListItemIcon> </MenuItem> ) })}
写法2:参数位置直接解构(更简洁)
{statusColorsArr.map(({id, name, colourR, colourG, colourB}) => ( <MenuItem key={id} value={name} className={classesF.A}> <Checkbox className={classesF.D} /> <ListItemText primary={id} /> <ListItemText primary={name} /> <ListItemIcon> <div style={{ width: '18px', height: '18px', backgroundColor: `rgb(${colourR},${colourG},${colourB})`, borderRadius: '3px' }} /> </ListItemIcon> </MenuItem> ))}
实现说明
- 遵循React列表渲染规范,用唯一id作为key值,避免渲染异常
- 利用数组中存储的RGB值生成对应状态的色块,符合数组定义的设计需求
- 所有属性读取路径正确,不会出现undefined类报错
内容的提问来源于stack exchange,提问作者Neal Rogers
相关产品推荐
相关产品推荐

