How to Debug NavLink in React Router
The NavLink component in React Router is essential for
building navigation bars with active state styling. However, developers
often encounter issues where active classes do not apply, routes fail to
match, or navigation behaves unexpectedly. This article provides a
straightforward guide on how to inspect, troubleshoot, and fix common
bugs with the NavLink component using browser developer
tools, functional props, and proper configuration.
1. Inspect the Rendered HTML in Browser DevTools
The quickest way to debug a NavLink is to check what
React Router is rendering in the DOM. 1. Right-click your navigation
link in the browser and select Inspect. 2. Look at the
rendered <a> tag. 3. Check the class
attribute. In React Router v6, NavLink automatically
applies an .active class to the anchor tag when the current
URL matches the to prop. If the class is missing, React
Router does not recognize the route as active.
2. Use Functional Props to Debug Active State
React Router v6 allows you to pass a function to the
className or style props. This function
receives an object with an isActive boolean. You can insert
a console.log inside this function to debug the matching
behavior in real-time.
<NavLink
to="/dashboard"
className={({ isActive }) => {
console.log("Dashboard active status:", isActive);
return isActive ? "nav-active" : "nav-inactive";
}}
>
Dashboard
</NavLink>Open your browser console and click through your navigation. If
isActive remains false even when you are on
the page, there is a mismatch between the to prop and your
defined <Route path="...">.
3. Solve Strict Matching Issues with the “end” Prop
A common bug occurs when a parent route remains permanently
highlighted as active because its sub-routes are active. By default,
NavLink matches any route that starts with the path
specified in the to prop.
To resolve this, add the end prop. This ensures the link
is only highlighted as active when the URL matches the specified path
exactly.
// Matches only '/profile', not '/profile/settings'
<NavLink to="/profile" end>
Profile
</NavLink>4. Verify the Router Context
If your NavLink is throwing an error or failing to
navigate, ensure that the component is rendered inside a router context.
NavLink cannot function outside of a router component.
Check your main entry file (e.g., index.js or
App.jsx) and verify the setup:
import { BrowserRouter } from 'react-router-dom';
const Root = () => (
<BrowserRouter>
<App />
</BrowserRouter>
);5. Inspect Props with React Developer Tools
If you are still experiencing issues, install the React
Developer Tools browser extension: 1. Open DevTools and switch
to the Components tab. 2. Search for
NavLink in the component tree. 3. Inspect the
props pane on the right. 4. Verify that the
to prop holds the correct string value and that the context
hooks (like useLocation and useNavigate) are
updating when the URL changes.