It’s very common, especially in navigation lists, to display the link as the active link the user is looking at. Let’s add this treatment to our invoices list by swapping out Link
for NavLink
.
import { NavLink, Outlet } from "react-router-dom"; import { getInvoices } from "../data"; export default function Invoices() { let invoices = getInvoices(); return ( <div style={{ display: "flex" }}> <nav style={{ borderRight: "solid 1px", padding: "1rem", }} > {invoices.map((invoice) => ( <NavLink style={({ isActive }) => { return { display: "block", margin: "1rem 0", color: isActive ? "red" : "", }; }} to={`/invoices/${invoice.number}`} key={invoice.number} > {invoice.name} </NavLink> ))} </nav> <Outlet /> </div> ); }
We changed the color of our link by looking at the isActive
value that NavLink passed to our styling function.
You can do the same thing with className
on NavLink:
// normal string <NavLink className="red" /> // function <NavLink className={({ isActive }) => isActive ? "red" : "blue"} />
References
https://reactrouter.com/docs/en/v6/getting-started/tutorial#active-links