I'm trying to build a nav, but the way I currently have the data setup I'm having to map within a map with a map to get all of my data out - I have a feeling that this is a poor way of doing something and there may be a better solution?
My code can also be found in a codesandbox here
Both the data and jsx are up for debate and I'm more than happy to modify either or both for a better solution.
My JSX:
<div className="App">
<nav>
{/* Top Level Nav Items */}
{nav.map((item) => (
<a href={item.url} key={item.category}>
{item.category}
</a>
))}
</nav>
{/* Nav Sub-Categories */}
<div className="subCategories">
{nav.map((item) => (
<div className="subCategory">
<img src={item.img} />
{item.subCatergories.map((subCategory) => (
<>
<h3>{subCategory.title}</h3>
{subCategory.links.map((link) => (
<a href={link.url}>{link.name}</a>
))}
</>
))}
</div>
))}
</div>
</div>
My data:
const nav = [
{
category: "LINK NAME",
url: "/link",
img: "https://via.placeholder.com/100/?text=Image",
subCatergories: [
{
title: "Sub Category 1",
links: [
{ name: "link 1", url: "/1" },
{ name: "link 2", url: "/2" },
{ name: "link 3", url: "/3" },
{ name: "link 4", url: "/4" },
{ name: "link 5", url: "/5" },
{ name: "link 6", url: "/6" },
{ name: "link 7", url: "/7" },
{ name: "link 8", url: "/8" },
{ name: "link 8", url: "/9" }
]
},
{
title: "Sub Category 2",
links: [
{ name: "link 1", url: "/1" },
{ name: "link 2", url: "/2" },
{ name: "link 3", url: "/3" },
{ name: "link 4", url: "/4" },
{ name: "link 5", url: "/5" },
{ name: "link 6", url: "/6" },
{ name: "link 7", url: "/7" },
{ name: "link 8", url: "/8" },
{ name: "link 8", url: "/9" }
]
},
{
title: "Sub Category 3",
links: [
{ name: "link 1", url: "/1" },
{ name: "link 2", url: "/2" },
{ name: "link 3", url: "/3" },
{ name: "link 4", url: "/4" },
{ name: "link 5", url: "/5" },
{ name: "link 6", url: "/6" },
{ name: "link 7", url: "/7" },
{ name: "link 8", url: "/8" },
{ name: "link 8", url: "/9" }
]
}
]
},
{
category: "LINK NAME 2",
url: "/link2",
img: "https://via.placeholder.com/100/?text=Image",
subCatergories: [
{
title: "Sub Category 1",
links: [
{ name: "link 1", url: "/1" },
{ name: "link 2", url: "/2" },
{ name: "link 3", url: "/3" },
{ name: "link 4", url: "/4" },
{ name: "link 5", url: "/5" },
{ name: "link 6", url: "/6" },
{ name: "link 7", url: "/7" },
{ name: "link 8", url: "/8" },
{ name: "link 8", url: "/9" }
]
},
{
title: "Sub Category 2",
links: [
{ name: "link 1", url: "/1" },
{ name: "link 2", url: "/2" },
{ name: "link 3", url: "/3" },
{ name: "link 4", url: "/4" },
{ name: "link 5", url: "/5" },
{ name: "link 6", url: "/6" },
{ name: "link 7", url: "/7" },
{ name: "link 8", url: "/8" },
{ name: "link 8", url: "/9" }
]
},
{
title: "Sub Category 3",
links: [
{ name: "link 1", url: "/1" },
{ name: "link 2", url: "/2" },
{ name: "link 3", url: "/3" },
{ name: "link 4", url: "/4" },
{ name: "link 5", url: "/5" },
{ name: "link 6", url: "/6" },
{ name: "link 7", url: "/7" },
{ name: "link 8", url: "/8" },
{ name: "link 8", url: "/9" }
]
}
]
}
];
Any help or guidance here would be great, thank you!
n
totallinks
items, there's no avoiding iteratingn
times. \$\endgroup\$ – CertainPerformance Nov 16 '20 at 17:58