
For my latest project, I wanted to change the background color of the active navigation link in the <Header> when being clicked. When working...
For further actions, you may consider blocking this person and/or reporting abuse
Just a reminder to those who are reading this, that if you insert
<a/>
wrapped inside a custom component inside<Link/>
that you should includepassHref
if the<a/>
wraps anything other than a string, otherwise your site may take a hit on SEO.Wow, thanks for this information, didn't know about that.
I thank you for taking the time to write this post!
Sadly for Nextjs version 13, your 2 approach seems to be outdated because is an invalid action to have a component with an tag as child (unless you are willing to use "legacybehavior").
With your post you gave me an idea. This solution is a bit raw because still unable to use active pseudo-class in the component
"active" is a set of styles defined in css module.
Let me know if you find something better. Best regards
Hey Juan, thanks for your message. Yeah, wrote that post a long time ago, but I donβt think I will spend time on this topic any time soon again.
I am sure others are happ about your suggestions, so thank you for that.
why not use tailwind instead of css classes
For Next.js 13
Replace
import { useRouter } from 'next/router';
With
import { usePathname } from "next/navigation";
Replace
const router = useRouter();
With
const pathname = usePathname();
and then replace
className={router.pathname == "/" ? "active" : ""}
with
className={pathname == "/" ? "active" : ""}
Ref: usePathname
Thanks for adding Matt!
Works perfectly for Next.js 14 using Pages Router.
julia it's fantactic tricks
how to change actve style in nextjs?
you save my day. tahnks a lot.
Thanks author you're a life saver.
Just a note, it would be sweet if your code samples were gist embeds or code blocks so people could copy/paste from them. The pictures look nice but it makes it harder to copy.
Hey Matt. Thank you so much for your suggestion. I changed the img to code blocks and will continue doing that :)
I would recommend extracting this to a separate function. Then you can do the following:
Then you can do something like this in your links (if you use string literals):
I'm a backend developer who has no knowledge in next.js. However, I needed to change something in the front-end. It took me much time trying to figure it out myself. Once I found this post, I could do it. Thanks a lot!
Glad that it helped :)
This helped me out tremendously. Helped me out so much that I created an account just to say thank you!
Thank you so much for your kind words :) Glad it helped!
Take a look at this solution and please let me know your thoughts.
Highlight active links in next.js
Thereβs a typo in the code.
should be:
Thank you, I fixed it :)
thank you it was very useful
You are a life saver, thanks for this
Great but I am using dynamic pathname and it doesn't work for me.
router.asPath may help
That's too bad. I hope you find a solution for your case soon.
how to acheive in Server Component
is it possible?
what would be the best way to make this code more DRY, cos if you got like 20 links this is going to be a pain to maintain
@syntaxsage Using a loop to render navigation items in a separate function and doing "router.pathName = href" might help in a large navigation list.