Использование состояния с именем activeMenu
усложняет ваш компонент без необходимости. Вам следует подумать о том, чтобы упростить его следующим образом:
import React, { Component } from 'react';
import { NavLink, withRouter } from 'react-router-dom';
import { Icon } from 'semantic-ui-react';
import Header from '../header/header';
// Style Components
import {LeftMenuStyle} from '../appStyles/appStyles'
class LeftMenuList extends Component {
constructor(props) {
super(props);
}
render() {
const menus = [
{
name: 'dashboard',
icon: 'dashboard',
},
{
name: 'organizations',
icon: 'sitemap',
},
{
name: 'contacts',
icon: 'phone square',
},
{
name: 'products',
icon: 'shopping cart',
},
{
name: 'sales',
icon: 'credit card',
},
{
name: 'purchases',
icon: 'shopping bag',
},
{
name: 'shipments',
icon: 'shipping',
},
{
name: 'everything',
icon: 'ald',
},
{
name: 'reports',
icon: 'chart line',
},
{
name: 'logout',
icon: 'arrow right',
}
];
return (
<div>
<Header />
<LeftMenuStyle>
<div className="left-menus">
{menus.map(item => {
return (
<NavLink to={"/"+item.name} name={item.name} key={item.name}
className='menu'
activeClassName='active'
>
<Icon name={item.icon} size="large"/>
<span>{item.name}</span>
</NavLink>
)
})}
</div>
</LeftMenuStyle>
</div>
);
}
}
export default withRouter(LeftMenuList);
Компонент Link
из react-router-dom
автоматически изменит ваш путь на активный путь, и, следовательно, ваша активная ссылка получит имя класса active
.
Здесь вы видите, что мы обертываем компонент функцией WithRouter
, которая дает вам конкретный объект пути react-router
, который вы можете использовать для определения вашего текущего пути.