Пошук уроків, статей та іншого контенту
Клієнтська навігація без перезавантаження сторінки — компонент Link і хуки для програмної навігації.
Звичайний <a href="..."> змушує браузер повністю перезавантажити сторінку — заново завантажити весь JavaScript і повторно ініціалізувати застосунок. Компонент Link із next/link виконує навігацію на клієнті, без повного перезавантаження, і завантажує потрібний код заздалегідь (prefetch), поки посилання лише з'являється у видимій області екрана.
import Link from "next/link";
function Nav() {
return (
<nav>
<Link href="/">Головна</Link>
<Link href="/blog">Блог</Link>
<Link href={`/blog/${post.slug}`}>{post.title}</Link>
</nav>
);
}Коли перехід має відбутись не за кліком на посилання, а як наслідок дії (успішна відправка форми, завершення таймера), використовують хук useRouter — доступний лише в Client Components:
"use client";
import { useRouter } from "next/navigation";
function LoginForm() {
const router = useRouter();
async function handleSubmit() {
await loginUser();
router.push("/dashboard"); // програмний перехід після успішного логіну
}
return <form action={handleSubmit}>{/* ... */}</form>;
}usePathname() повертає поточний шлях (корисно для підсвічування активного пункту меню), useSearchParams() — параметри рядка запиту. Обидва так само доступні лише в Client Components:
"use client";
import { usePathname } from "next/navigation";
function NavLink({ href, children }: { href: string; children: React.ReactNode }) {
const pathname = usePathname();
const isActive = pathname === href;
return (
<Link href={href} className={isActive ? "active" : ""}>
{children}
</Link>
);
}Використання звичайного <a> замість Link для внутрішньої навігації — втрачається клієнтський перехід без перезавантаження й автоматичний prefetch.
Виклик useRouter/usePathname у Server Component — ці хуки працюють лише в Client Components (потрібна директива "use client"), інакше збірка впаде з помилкою.
Програмна навігація (router.push) там, де достатньо звичайного Link, — Link дає prefetch і кращу доступність (працює як справжнє посилання) без зайвого JavaScript-обробника.
Link — стандартний спосіб навігації в Next.js: клієнтський перехід без перезавантаження сторінки та автоматичний prefetch видимих посилань. useRouter, usePathname і useSearchParams доступні лише в Client Components і потрібні для програмної навігації чи читання поточного маршруту в коді — для звичайних кліків по посиланнях Link майже завжди достатньо сам по собі.