Capítulo 109 de 456
<Link> (next/link) estende <a> para dar prefetching automático e navegação client-side entre rotas; é a forma primária de navegar entre rotas no Next.js.
href (obrigatório): string ou objeto ({ pathname, query }).replace: default false; quando true, substitui o history state em vez de empilhar nova entrada.scroll: default true, mantém posição de scroll se a Page continuar visível, senão rola para o topo do primeiro elemento Page; elementos sticky/fixed são ignorados na busca pelo alvo de scroll.prefetch: "auto"/null (default) prefetcha rota inteira se estática, ou parcial até o loading.js mais próximo se dinâmica; true prefetcha rota inteira sempre (com Partial Prefetching, inclui App Shell); false nunca prefetcha. Prefetch só ocorre em produção.onNavigate: handler chamado durante navegação client-side, com preventDefault() disponível; diferente de onClick (que dispara em todo clique, inclusive Ctrl/Cmd+Click e downloads, onde onNavigate não dispara).transitionTypes: lista passada a React.addTransitionType, para <ViewTransition> aplicar animações distintas por tipo de navegação.<a> normais (className, target="_blank", etc.) passam direto para o elemento <a> subjacente.import Link from 'next/link'
export default function Page() {
return (
<Link href={{ pathname: '/about', query: { name: 'test' } }}>
About
</Link>
)
}
href como objeto, navegando para /about?name=test.'use client'
import { usePathname } from 'next/navigation'
import Link from 'next/link'
export function Links() {
const pathname = usePathname()
return (
<nav>
<Link className={`link ${pathname === '/' ? 'active' : ''}`} href="/">
Home
</Link>
</nav>
)
}
usePathname() comparado ao href.<Link href="/dashboard" prefetch={false}>
Dashboard
</Link>
| Prop | Example | Type | Required |
|---|---|---|---|
href | href="/dashboard" | String ou Object | Sim |
replace | replace={false} | Boolean | - |
scroll | scroll={false} | Boolean | - |
prefetch | prefetch={false} | Boolean ou null | - |
onNavigate | onNavigate={(e) => {}} | Function | - |
transitionTypes | transitionTypes={['slide-in']} | string[] | - |
onClick com onNavigate: onNavigate só roda em navegação client-side same-origin; não dispara com modifier keys (nova aba), URLs externas, ou atributo download.<Link> para navegação para fora do site: prefetch e client-side navigation só funcionam same-origin; para link externo, target="_blank" funciona mas sem os benefícios de prefetch/onNavigate.scroll={false} também tem equivalente imperativo: router.push(url, { scroll: false }).href com hash (#id) funciona nativamente pois <Link> renderiza <a>.replace evita empilhar entrada no histórico, útil para navegação que não deve ser "voltada" (ex. após form submit).