Reputation: 294
I have a component that renders a list. Each item has a classname. My question is how can I dynamically add a classname followed by an incrementing value.
function Menu(props) {
const list = ['list1', 'list2', 'list3']
const menuitems = list.map((list, index) => {
return <li className="menuitem" key={index}>{list}</li>
})
return (
<ul>{menuitems}</ul>
)
}
In the DOM, it should look like this:
<ul>
<list class="menuitem item-1">list1</li>
<list class="menuitem item-2">list2</li>
<list class="menuitem item-3">list3</li>
</ul>
Upvotes: 0
Views: 77
Reputation: 349
Try This :
function Menu(props = null) {
const list = ['list1', 'list2', 'list3']
const menuitems = list.map((list, index) => {
return `<li className="menuitem item-${index + 1}" key="${index}">${list}</li>`
});
return (
`<ul>${menuitems.join(" ")}</ul>`
)
}
Upvotes: 2
Reputation: 1674
This should work
function Menu(props) {
const list = ['list1', 'list2', 'list3']
const menuitems = list.map((list, index) => {<li className=`menuitem itme-${index + 1}>{list}</li>})
return <ul>{menuitems}</ul>
}
Upvotes: 0
Reputation: 773
Try this
const menuitems = list.map((list, index) => {
return <li className={`menuitem item-{index+1}`} key={index}>{list}</li>
})
Upvotes: 1
Reputation: 2730
It's pretty simple =)
function Menu(props) {
const list = ['list1', 'list2', 'list3']
const menuitems = list.map((list, index) => {
return <li className={`menuitem item-${index + 1}`} key={index}>{list}</li>
})
return (
<ul>{menuitems}</ul>
)
}
It uses JSX Expression { - expression code lives here - }
. You can place any valid JS expression between curly braces.
Upvotes: 3
Reputation: 8887
You could use package called classnames or:
<li className={`menuitem-${index}`} key={index}>{list}</li>
Upvotes: 1