I have a task, but i couldnt get the solution for it in reactjs. I would like to show the result in two columns like: So every next element should be added in the second column, but the first column should be limited to 2 rows.
item 1 | item 4
item 2 | item 5
| item 6
When i loop through the array the columns are getting divided into equal order, but as you see in the diagram i need to split them in 2:3 ratio. I am giving the sandbox link here on what i have tried so far.
// Example class component
class Thingy extends React.Component {
render() {
const secondaryNav = [
{
title: "Games",
name: ["Roadrash", "Prince of Persia", "Counter Strike"]
},
{
title: "Resources",
name: ["Images", "Videos", "E-books"]
},
{
title: "Shop",
name: ["Shop now"]
},
{
title: "Account",
name: ["Log In", "Register"]
},
{
title: "Support",
name: ["Email", "Call Us", "Get a callback"]
}
];
return (
<div className="App">
<div className="container">
<div className="row">
{secondaryNav.map((item, i) => {
return (
<div className="col-lg-6 col-md-6">
<h3>{ item.title }</h3>
<ul>
{item.name.map((items, i) => {
return <li>{items}</li>
})}
</ul>
</div>)
})}
</div>
</div>
</div>
)
}
}
// Render it
ReactDOM.render(
<Thingy title="I'm the thingy" />,
document.getElementById("react")
);<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script> <div id="react"></div> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
Advertisement
Answer
You need to add the css on it and also you could slice your array as you like.
this is the piece of the code
<div className="row">
{secondaryNavData.slice(0, 2).map((item, i) => {
return (
<div className="col-lg-6 col-md-6">
<h3>{item.title}</h3>
<ul>
{item.name.map((items, i) => {
return <li>{items}</li>;
})}
</ul>
</div>
);
})}
</div>
<div className="row-2">
{secondaryNavData.slice(2, 5).map((item, i) => {
return (
<div className="col-lg-6 col-md-6">
<h3>{item.title}</h3>
<ul>
{item.name.map((items, i) => {
return <li>{items}</li>;
})}
</ul>
</div>
);
})}
</div>
Try this codesandbox based on yours for the full code with the css https://codesandbox.io/s/elegant-grass-nmeux