Detect active links in Next.js

I'm a full-stack developer from South Africa 🇿🇦. I love writing about JavaScript, HTML and CSS.
Search for a command to run...

I'm a full-stack developer from South Africa 🇿🇦. I love writing about JavaScript, HTML and CSS.
No comments yet. Be the first to comment.
Most of you know me for my consistency, a golden arrow in my blog series. I've written 1000 articles in 1008 days! Almost an article a day, and my honeymoon was the only holiday I ever took. I'm super proud of this achievement; it has been a fantasti...

It's not the first time I'll be talking about community. I think it's an essential aspect of any successful tool. This shows in my previous explorations of Astro, Medusa, and now Vendure as well. All these products thrive in a super open, welcoming, ...

The cool part about Vendure is how easy it is to set up and how abstract each layer is. Basically, we get the following elements: External database Server Worker Admin UI Frontend While this is amazing, it also brings a bit of complexity when it co...

The previous article looked at customizing Vendure on a data and process level. In this article, we'll look at customizing emails, as they are often a big part of a webshop system. We'll be looking at two different layers of customization for customi...

Even though Vendure is a pretty significant project out of the box, in some cases, we might want to go in and modify some elements to work to our specific use case. In this article, I'll take a high-level look at some elements we can customize within...

Now that we have an almost complete Next.js website driven by WordPress let's see how we can detect the active links.
Feel free to follow along by using this GitHub repo as your starting point.
Before we can add our active link check we need to migrate our existing hrefs to the Next.js Link component.
To do so, open up the Header.js component and include the Link component.
import Link from 'next/link';
Then we need to wrap our href into this Link component like so:
<Link href={item.node.connectedNode.node.slug}>
<a className="cursor-pointer p-4 ml-2 text-white">{item.node.label}</a>
</Link>
This doesn't change the effect we see on the frontend; however, it's the best way to navigate Next.js applications.
Ok, so now how do we check which is the active link?
First of all, we need to introduce the useRouter from the Next router.
import {useRouter} from 'next/router';
And inside our Header function define it like so:
const router = useRouter();
Then we can use a dynamic className on our a element.
<a
className={`cursor-pointer p-4 ml-2 text-white ${
router.asPath === `/${item.node.connectedNode.node.slug}`
? 'underline'
: ' hover:underline'
}`}
>
{item.node.label}
</a>
We use the router asPath, which returns something like /sample-page to check against the slug we are setting.
In my case, I have to include the / in the beginning because it's not set on my slug object.
And that's it. We now have styled our active pages with an underline.

And as usual, you can find the complete code on this GitHub repo.
Thank you for reading my blog. Feel free to subscribe to my email newsletter and connect on Facebook or Twitter