I am using react-router-dom: 4.2.2. I can add activeClassName to the current URL. But surprisingly the class is always added to root URL. 
While visiting a page, for example the error page like the screenshot below, the home navlink also getting the activeClass.

Update: In the above screenshot I have showed that I visited http://localhost:3000/#/error. So, the active-link should be added to the Love Error? NavLink only. But as you can see it is also added to Home NavLink too.
Here is my navbar code:
import React from 'react'; import { NavLink } from 'react-router-dom';  export const NavigationBar = () => (   <ul className="horizontal-menu">     <li> <NavLink to = '/' activeClassName="active-link">Home</NavLink> </li>     <li> <NavLink to = '/about' activeClassName="active-link">About Us</NavLink> </li>     <li> <NavLink to = '/error' activeClassName="active-link">Love Error?</NavLink> </li>   </ul> )   For routing I have used the following Switch:
<Switch>   <Route exact path = '/' component = {Home} />   <Route exact path = '/about' component = {AboutUs} />   <Route exact path = '/error' component = {Error404} />   <Route path = "/news/:id" component = {NewsDetail} />   <Route path="*" component={Error404} /> </Switch>   How can I get the expected behavior?
Use the useLocation() hook to get the current route with React Router, e.g. const location = useLocation() . The hook returns the current location object. For example, you can access the pathname as location. pathname .
Creating the navigation menu It is a special version of the Link component which no longer does conditional styling as of version 4. Import NavLink into scope first: import { NavLink } from 'react-router-dom'; Then create the Navigation component just below the App component.
You could try disabling the button with a custom click handler. Show activity on this post. Show activity on this post. React actually throws a warning if you set href to a boolean, but just leaving the href prop unspecified does the trick as well.
You have to use isActive={} to add additional verification to ensure whether the link is active.
document
Working jsFiddle. (fiddle is not created by me)
Code you need to add is like below
Example in jsfiddle
<li><NavLink to="/" isActive={checkActive}>Home</NavLink></li>   Change in your code
<li> <NavLink to='/' activeClassName="active-link" isActive={checkActive}>Home</NavLink> </li>   check the isActive prop and "checkActive" is a function.
const checkActive = (match, location) => {     //some additional logic to verify you are in the home URI     if(!location) return false;     const {pathname} = location;     console.log(pathname);     return pathname === "/"; }   Another config you can use is "exact" but It is not possible to demonstrate it in a jsFiddle. I think the code would be like
<li> <NavLink exact to='/' activeClassName="active-link">Home</NavLink> </li>   Hope this helps. And let me know if you need more info.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With