QuickTip: Grouping React components in surrounding components
Let’s assume you have an array of data:
const content = [
"content 1",
"content 2",
"content 3",
"content 4",
"content 5",
"content 6",
"content 7"
];
What you want to end up with is this:
<div class="container">
<div class="row">
<div class="col-md-4">content 1</div>
<div class="col-md-4">content 2</div>
<div class="col-md-4">content 3</div>
</div>
<div class="row">
<div class="col-md-4">content 4</div>
<div class="col-md-4">content 5</div>
<div class="col-md-4">content 6</div>
</div>
<div class="row">
<div class="col-md-4">content 7</div>
</div>
</div>
In other words, you want to group 3 elements together by surrounding them with another element.
The solution
const App = () => {
const content = [
"content 1",
"content 2",
"content 3",
"content 4",
"content 5",
"content 6",
"content 7"
];
const groupSize = 3;
return (
<div>
{
content.map((c) => <div className="col-md-4">{c}</div>)
.reduce((r, element, index) => {
// create element groups with size 3, result looks like:
// [[elem1, elem2, elem3], [elem4, elem5, elem6], [elem7]]
index % groupSize === 0 && r.push([]);
r[r.length - 1].push(element);
return r;
}, [])
.map((rowContent) => <div className="row">{rowContent}</div>)
}
</div>
);
}
ReactDOM.render(<App />,
document.getElementById("root"))