๋‹ด๊ณฐ๋†
minkyung.dev
๋‹ด๊ณฐ๋†
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (40)
    • ๐ŸŽ€ ํ”„๋กœ์ ํŠธ (6)
      • ์ธ์‚ฌ์ดํŠธ์•„์›ƒ (2)
      • ์บก์Šคํ†ค (2)
      • ์ž๋ฆฌ์–ด๋•Œ (1)
    • ๐Ÿ‘ฉ‍๐ŸŽค ํ”„๋ก ํŠธ์—”๋“œ (22)
      • react (5)
      • nextjs (4)
      • typescript (3)
      • javascript (4)
      • html (4)
      • css (2)
    • ๐Ÿงฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (2)
      • leetcode (1)
      • programmers (0)
    • ๐Ÿง  CS (1)
    • ๐ŸŽ ํšŒ๊ณ  (2)
    • private (0)
    • ๐Ÿง‘‍๐ŸŽค์ด์ง (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • javascript
  • github
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • react-router
  • ์ธํ”„๋ŸฐX๋””ํ”„๋งŒ
  • vsCode
  • Django
  • leetcode
  • ์ธํ”„๋Ÿฐ
  • ESLint
  • react
  • HTML
  • ๋””ํ”„๋งŒ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๋‹ด๊ณฐ๋†

minkyung.dev

๐Ÿ‘ฉ‍๐ŸŽค ํ”„๋ก ํŠธ์—”๋“œ/nextjs

[Nextjs] Linking & Navigating

2023. 1. 31. 15:47
728x90
๋ฐ˜์‘ํ˜•

Next ๋ผ์šฐํ„ฐ๋Š” ์„œ๋ฒ„ ์ค‘์‹ฌ์˜ ๋ผ์šฐํŒ…๊ณผ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ฆ‰๊ฐ์ ์ธ ๋กœ๋”ฉ ์ƒํƒœ์™€ concurrent ๋ Œ๋”๋ง์„ ์ง€์›ํ•œ๋‹ค.

์ฆ‰, ๋„ค๋น„๊ฒŒ์ด์…˜์€ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ , ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์žฌ๋ Œ๋”๋ง์„ ํ”ผํ•˜๊ณ , ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ race condition์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

<Link> ์ปดํฌ๋„ŒํŠธ

HTML <a> ์š”์†Œ๋ฅผ ํ™•์žฅํ•œ ๊ฒƒ์œผ๋กœ prefetching๊ณผ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์ œ๊ณตํ•œ๋‹ค. 

Next์—์„œ ๋„ค๋น„๊ฒŒ์ด์…˜์— ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
ํŠน์ • ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ผ๋ฉด <Link> ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.
import Link from 'next/link';

export default function Page() {
  return <Link href="/dashboard">Dashboard</Link>;
}

next/link์—์„œ importํ•ด์„œ href๋ฅผ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๋™์ ์œผ๋กœ ๊ฒฝ๋กœ ์„ค์ •ํ•˜๊ธฐ

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

import Link from 'next/link';

export default function PostList({ posts }) {
  return (
    <ul>
      {posts.map((post) => (
        <li key={post.id}>
          <Link href={`/blog/${post.slug}`}>
            {post.title}
          </Link>
        </li>
      ))}
    </ul>
  );
}

 

useRouter 

useRouter ํ›…์€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ route๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

'use client';

import { useRouter } from 'next/navigation';

export default function Page() {
  const router = useRouter();

  return (
    <button type="button" onClick={() => router.push('/dashboard')}>
      Dashboard
    </button>
  );
}

next/navigation์—์„œ importํ•ด์„œ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ํ›…์„ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

 

useRouter์€ push, refresh ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

Navigation์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹

1. <Link> ๋˜๋Š” router.push()๋ฅผ ํ†ตํ•ด ๊ฒฝ๋กœ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค

2. ๋ผ์šฐํ„ฐ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ์ฐฝ์— URL์„ ๋ณ€๊ฒฝํ•œ๋‹ค.

3. rotuer๋Š” ํด๋ผ์ด์–ธํŠธ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ segment๋Š” ์žฌ์‚ฌ์šฉํ•œ๋‹ค. 

4. soft navigation์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋ฉด, ๋ผ์šฐํ„ฐ๋Š” ์บ์‹œ์—์„œ ์ƒˆ๋กœ์šด segment๋ฅผ ํŒจ์น˜ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋ผ์šฐํ„ฐ๋Š” hard navigation์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํŒจ์น˜ํ•œ๋‹ค.

hard navigation: ์บ์‹œ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์•„์„œ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹
soft navigation: ์บ์‹œ๊ฐ€ ์žฌ์‚ฌ์šฉ๋˜์–ด ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹

soft navigation ์กฐ๊ฑด
1. prefetch๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
2. ๋™์  ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
3. ํ˜„์žฌ ๊ฒฝ๋กœ์—์„œ ๋™์ผํ•œ ๋™์  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

5. ์ƒ์„ฑ๋˜๋ฉด, ๋ฐ์ดํ„ฐ๊ฐ€ ํŒจ์น˜๋˜๋Š” ๋™์•ˆ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋กœ๋”ฉ UI๋ฅผ ๋ณด์—ฌ์ค€๋‹ค

6. ๋ผ์šฐํ„ฐ๋Š” ์ƒˆ๋กœ์šด segment๋ฅผ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

 

Client-side ์บ์‹ฑ

Client-side ์บ์‹œ๋Š” Next์˜ HTTP ์บ์‹œ์™€๋Š” ๋‹ค๋ฅด๋‹ค.

์ƒˆ๋กœ์šด ๋ผ์šฐํ„ฐ๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ์ธ๋ฉ”๋ชจ๋ฆฌ client-side ์บ์‹œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

์ฆ‰, ํŠน์ • ๊ฒฝ์šฐ์— ๋ผ์šฐํ„ฐ๋Š” ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

https://beta.nextjs.org/docs/routing/linking-and-navigating#client-side-caching-of-rendered-server-components

 

Routing: Linking and Navigating | Next.js

Learn how to use the Link Component, useRouter Hook, and navigate between routes in your Next.js application.

beta.nextjs.org

 

 

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ‘ฉโ€๐ŸŽค ํ”„๋ก ํŠธ์—”๋“œ > nextjs' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Next.js][react-query] API Routes ์‚ฌ์šฉ์‹œ ๋ฌดํ•œ request ๋ฐœ์ƒ ์ด์Šˆ  (0) 2023.02.09
[NextJS] Pages, Layouts  (0) 2023.01.31
[NextJS] Routing  (0) 2023.01.31
    '๐Ÿ‘ฉ‍๐ŸŽค ํ”„๋ก ํŠธ์—”๋“œ/nextjs' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Next.js][react-query] API Routes ์‚ฌ์šฉ์‹œ ๋ฌดํ•œ request ๋ฐœ์ƒ ์ด์Šˆ
    • [NextJS] Pages, Layouts
    • [NextJS] Routing
    ๋‹ด๊ณฐ๋†
    ๋‹ด๊ณฐ๋†

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”