I am trying to update which menu item was clicked and therefore change the class accordingly. I have tried different way suggested to do it but couldn't make it work.
Heres my code:
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
this.state = {
menuState: [
{
menuName: 'homeMenuStatus',
homeMenuStatus: 'inactive',
ulSidenavClass: "nav child_menu no-display"
},
{
menuName: 'accountMenuStatus',
accountMenuStatus: 'active',
ulSidenavClass: "nav child_menu block-display"
},
{
menuName: 'contactMenuStatus',
peopleMenuStatus: 'inactive',
ulSidenavClass: "nav child_menu no-display"
},
]
}
}
handleClick(menuClicked) {
this.state.menuState.map((name, index) => {
let thisMenu = name.menuName;
if(name.menuName == menuClicked) {
if(this.state.menuClicked === 'active') {
this.setState({
...this.state,
menuClicked: 'inactive',
ulSidenavClass: 'block-display height-adjust'
});
} else {
this.setState({
...this.state,
menuClicked: 'active',
ulSidenavClass: 'block-display'
});
}
} else {
this.setState({
...this.state,
thisMenu: 'inactive',
ulSidenavClass: 'block-display height-adjust'
});
}
});
}
HTML:
<div>
<ul>
<li className={this.state.menuState[0].homeMenuStatus}>
<a onClick={() => this.handleClick('homeMenuStatus')}>Home </a>
<ul className={this.state.menuState[0].ulSidenavClass}>
<li>
<a href="#">Dashboard</a>
</li>
<li>
<a href="#">Activities</a>
</li>
</ul>
</li>
</ul>
</div>
My state object is not getting changed. Must be doing something wrong in setState(). Can anyone please guide me.