Активная вкладка меню в ReactJS
Как правильнее всего подсветить активную вкладку меню навигации в Реакте с функциональным подходом? Интересует оптимальный метод с учетом того что "линков" может быть не 2, а 20... Как сделать оптимальней всего без дублирования кода?
import React from 'react';
import './styles/styles.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import { BrowserRouter, Route } from "react-router-dom";
import Navbar from './components/Navbar';
import Profile from './components/Profile';
import Dialogs from './components/Dialogs';
const App = (props) => {
return (
<BrowserRouter>
<div className="app-wrapper">
<Navbar/>
<>
<Route path='/dialogs' component={Dialogs}/>
<Route path='/profile' component={Profile}/>
</>
</div>
</BrowserRouter>
)
}
export default App;
import React from 'react';
import { Link } from "react-router-dom";
const Navbar = () => {
return (
<>
<ul className="nav justify-content-center">
<li className="nav-item">
<Link to='/dialogs' className="nav-link">Dialogs</Link>
</li>
<li className="nav-item">
<Link to='/profile' className="nav-link">Profile</Link>
</li>
</ul>
</>
)
}
export default Navbar;
Ответы (2 шт):
Автор решения: Grigory Morgachev
→ Ссылка
Оптимальный вариант использовать NavLink с activeClassName
Автор решения: akokoryshkin
→ Ссылка
Заменил <Link> на <NavLink>, добавил activeClassName={"nav-link-selected"} и задал классу .nav-link-selected необходимый стиль (в моем случае font-weight: bold) - работает корректно.
import React from 'react';
import { NavLink } from "react-router-dom";
const Navbar = () => {
return (
<>
<ul className="nav justify-content-center">
<li className="nav-item">
<NavLink to='/dialogs' className="nav-link" activeClassName={"nav-link-selected"}>Dialogs</NavLink>
</li>
<li className="nav-item">
<NavLink to='/profile' className="nav-link" activeClassName={"nav-link-selected"}>Profile</NavLink>
</li>
</ul>
</>
)
}
export default Navbar;