</>
⌕
Junior #link#prefetch#navigation

next/link prefetch hoạt động thế nào và điều hướng client-side khác gì reload trang?

⚡ Trả lời nhanh

`<Link>` điều hướng client-side (không reload) và tự prefetch route khi link vào viewport, chỉ ở production. Route tĩnh được prefetch đầy đủ; route dynamic chỉ prefetch tới `loading.tsx` gần nhất. Tắt bằng `prefetch={false}`.

import Link from "next/link";

<Link href="/blog/hello">Đọc bài</Link>
<Link href="/admin" prefetch={false}>Admin</Link>

Điều hướng bằng code (Client Component): useRouter() từ next/navigation với push, replace, back, refresh; trong Server Component dùng redirect().

  • Prefetch tải trước RSC payload và JS, nên chuyển trang gần như tức thì.
  • Dev mode không prefetch, nên đừng đo hiệu năng điều hướng ở next dev.
  • router.refresh() lấy lại RSC payload của route hiện tại mà vẫn giữ state client.
  • Dùng <a> thường sẽ reload cả trang và mất state client.
🃏 Ôn bằng flashcard