Back To Snippets

ActiveLink

Next.js 13 Link Abstraction for Active Link Styling.

active-link.tsx

active-link.tsx

"use client"; import Link, { type LinkProps } from "next/link"; import { usePathname } from "next/navigation"; import { twMerge } from "tailwind-merge"; // can swap with shadcn `cn` util type ActiveLinkProps = LinkProps & React.ComponentProps<"a"> & { activeClassName?: string; }; export const ActiveLink = ({ className, activeClassName, href, ...props }: ActiveLinkProps) => { const pathname = usePathname(); const isActive = pathname === href; return ( <Link href={href} className={twMerge(className, isActive && activeClassName)} {...props} /> ); }; ActiveLink.displayName = "ActiveLink";

Usage

src/app/page.tsx

src/app/page.tsx

<ActiveLink href="/snippets" className="text-blue-500 hover:text-blue-500/70" activeClassName="text-orange-500 hover:text-orange-500/70" > Snippets </ActiveLink>