reactjs - 在反应中呈现每个类别的子类别
问题描述
如果我有一个接收道具并且必须对数据进行分类的无状态功能组件:根据类别显示它,每个类别都会有子类别我将如何呈现它。我的代码如下所示:
import React from "react";
import "./style.css";
const IndicatorSelector = props => {
const indicators = props.indicators || [];
console.log(indicators);
return indicators
.sort((a, b) => a.name > b.name)
.map((indicator, index) => {
return (
<div>
<ul className="checkBox">
<li className="list">
<input
key={`${index}`}
type="checkbox"
name={indicator}
className="checkInput"
/>
<label for="indicator">{indicator.type}</label>
</li>
</ul>
</div>
);
});
};
export default IndicatorSelector;
解决方案
您可以使用groupBy fromlodash
根据 进行分类names
。第一个参数将是一个数组/对象。第二个参数将是一个转换键的函数。在您的情况下,由于您需要 groupBy name
,因此您需要name
从函数返回。
_.groupBy([ { "name": "Gini Measure", "type": "Disposable Gini" }, { "name": "Gini Measure", "type": "Market Gini" }, { "name": "Gini Measure", "type": "Absolute Redistribution" }, { "name": "Gini Measure", "type": "Relative Redistribution" } ],
(x) => x.name);
输出:
{"Gini Measure":[{"name":"Gini Measure","type":"Disposable Gini"},{"name":"Gini Measure","type":"Market Gini"},{"name":"Gini Measure","type":"Absolute Redistribution"},{"name":"Gini Measure","type":"Relative Redistribution"}]}
考虑到您要渲染子类别,您可以这样做:
const IndicatorSelector = props => {
const indicators = props.indicators || [];
const grouped = _.groupBy(indicators, x => x.name);
return Object.keys(grouped).
.map(x => {
return (
<div>
<label for="indicator">{x}</label>
{grouped[x].map((obj, index) => (
<ul className="checkBox">
<li className="list">
<input
key={`${index}`}
type="checkbox"
name={obj}
className="checkInput"
/>
<label for="indicator">{obj.type}</label>
</li>
</ul>)
)}
</div>
);
});
};
export default IndicatorSelector;
推荐阅读
- amazon-ec2 - 有没有办法通过 Ansible 的标签终止所有 EC2 实例?
- php - Laravel 尝试选择 belongsTo 关系列
- linux - 从 shell 脚本执行时使用 psql 关闭 postgres 连接
- php - 使用 foreach 循环创建计数
- python - 如何仅将索引值作为整数而不是索引类型获取?
- c++ - C++中变量的值自动变化
- excel - 在一系列单元格中获取 5 个最常见的分隔子字符串
- c++ - 如何使用 Visual Studio 中的哪个头文件检查类变量是否包含在内?
- dataframe - 根据上个月和上年过滤火花数据框
- python - 如何在不更改标准输出的情况下将控制台窗口中的最新行转换为字符串?