const Router = () => (
<BrowserRouter>
<div>
<Nav>
<NavLink exact={true} activeClassName='is-active' to='/'>Home</NavLink>
<NavLink activeClassName='is-active' to='/about'>About</NavLink>
</Nav>
<Match pattern='/' exactly component={Home} />
<Match pattern='/about' exactly component={About} />
<Miss component={NoMatch} />
</div>
</BrowserRouter>
)
<NavLink
to="users"
className={({ isActive }) => (isActive ? 'active' : 'inactive')}
>
Users
</NavLink>
// react router v6 active route
import * as React from "react";
import {
Routes,
Route,
Outlet,
Link,
useMatch,
useResolvedPath,
} from "react-router-dom";
import type { LinkProps } from "react-router-dom";
export default function App() {
return (
<div>
<h1>Custom Link Example</h1>
<p>
This example demonstrates how to create a custom{" "}
<code><Link></code> component that knows whether or not it is
"active" using the low-level <code>useResolvedPath()</code> and
<code>useMatch()</code> hooks.
</p>
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<Home />} />
<Route path="about" element={<About />} />
<Route path="*" element={<NoMatch />} />
</Route>
</Routes>
</div>
);
}
function CustomLink({ children, to, ...props }: LinkProps) {
let resolved = useResolvedPath(to);
let match = useMatch({ path: resolved.pathname, end: true });
return (
<div>
<Link
style={{ textDecoration: match ? "underline" : "none" }}
to={to}
{...props}
>
{children}
</Link>
{match && " (active)"}
</div>
);
}
function Layout() {
return (
<div>
<nav>
<ul>
<li>
<CustomLink to="/">Home</CustomLink>
</li>
<li>
<CustomLink to="/about">About</CustomLink>
</li>
</ul>
</nav>
<hr />
<Outlet />
</div>
);
}
function Home() {
return (
<div>
<h1>Home</h1>
</div>
);
}
function About() {
return (
<div>
<h1>About</h1>
</div>
);
}
function NoMatch() {
return (
<div>
<h1>Nothing to see here!</h1>
<p>
<Link to="/">Go to the home page</Link>
</p>
</div>
);
}
<NavLink
key={tab.id}
className={(navData) =>
navData.isActive ? styles.activeTab : styles.inactiveTab
}
to={tab.path}
>
{tab.name}
</NavLink>