javascript - 根据对象数组中的条目将css类添加到循环生成的元素中
问题描述
我有几个用于环境 ( envList
) 和团队 ( teamsList
) 的对象,如下所示:
const envList = {
dev: "DEV",
sit: "SIT",
uat: "UAT",
qa: "QA",
prod: "PROD"
};
const teamsList = {
a: "Team A",
b: "Team B",
c: "Team C",
d: "Team D"
};
我正在循环它们以显示它们(有点)像一张桌子:
<div className="App">
{Object.keys(teamsList).map((key, i) => (
<div className="team" key={i}>
<span className="teamname">{teamsList[key]}</span>
{Object.keys(envList).map((key, i) => (
<span className="env-th-cell" key={key}>
{envList[key]}
</span>
))}
</div>
))}
</div>
注意:上面是 JSX,但它并不是真正的 React 问题。只是在团队和环境上嵌套地图。
生成输出,例如
Team A DEV SIT UAT QA PROD
Team B DEV SIT UAT QA PROD
Team C DEV SIT UAT QA PROD
Team D DEV SIT UAT QA PROD
我需要添加一个 CSS 类 ( .red
) 以突出显示基于以下redTeams
数组的任何团队的环境:
const redTeams = [
{
envIndex: 0,
team: "Team A"
},
{
envIndex: 0,
team: "Team B"
},
{
envIndex: 4,
team: "Team B"
}
{
envIndex: 3,
team: "Team C"
},
{
envIndex: 4,
team: "Team C"
}
];
如果 ateam
和 anenvIndex
存在于 中redTeams
,我想在该环境的跨度上添加一个类。redTeams 中的一个团队可能有多个条目。
Team A DEV(red) SIT UAT QA PROD
Team B DEV(red) SIT UAT QA PROD (red)
Team C DEV SIT UAT QA(red) PROD
Team D DEV SIT UAT QA PROD(red)
上面的输出是为了表示,没有(红色),而是添加了一个类span
这是一个沙箱https://codesandbox.io/s/pwjxy82j5x?fontsize=14
有关该方法的一些建议会有所帮助和赞赏
解决方案
您需要在渲染时有条件地添加 className。在此之前,您需要为 envIndex 到 env 映射创建一个映射
<div className="App">
{Object.keys(teamsList).map((key, i) => {
const teams = redTeams.filter(team => teamsList[key] === team.team);
return (
<div className="team" key={i}>
<span className="teamname">{teamsList[key]}</span>
{Object.keys(envList).map((key, i) => {
let className = "env-th-cell";
if (
teams &&
teams.findIndex(
t => envList[key] === indexToEnvMap[t.envIndex]
) > -1
) {
className += " red";
}
return (
<span className={className} key={key}>
{envList[key]}
</span>
);
})}
</div>
);
})}
</div>
推荐阅读
- google-bigquery - 根据列中的值将 BigQuery 临时表导出到多个文件中
- reactjs - VSCode 不断要求在 NextJS 和 React 17 应用程序上导入 React
- linux - io_uring 内部如何工作?
- pycharm - 如何在 PyCharm 中选择当前行下方的所有行
- android - 人脸检测在某些设备上不起作用
- javascript - 使用参数更新输入值
- python-3.x - 鼠标点击滚动
- apache-spark - 卡在 EMR 中的“主机丢失的随机文件”中,用于多个镶木地板文件和连接
- jenkins - 在Jenkins中定期构建作业时设置特定分支
- java - 如何使用 Helidon MP REST 服务将文件作为 Blob/Clob 上传到 Oracle DB