TIL/Next.js

[TIL] Next.js 13 λΌμš°νŒ…

Dong _ hwa 2023. 5. 27. 03:29

μ΄μ „μ—λŠ”  next.js 12버전을 μΌμ—ˆλŠ”λ°, μ΄λ²ˆμ— μƒˆλ‘œ λ‚˜μ˜€λŠ” 13버전을 μ“°κΈ°λ‘œ ν–ˆλ‹€

13은 λΌμš°νŒ…κ³Όμ •μ΄ μ•„μ˜ˆ(?) λ‹¬λΌμ§€λŠ”λ°, μš”λ²ˆμ— μ•Œμ•„λ³΄λ„λ‘ν•œλ‹Ή.

이전에 μ½”λ”©μ• ν”Œμ—μ„œ λ“€μ—ˆλ˜ κ°•μ˜κ°€ 13λ²„μ „μ΄μ—ˆλŠ”λ° 그것도 λͺ¨λ₯΄κ³  κ²€μƒ‰ν•΄κ°€λ©΄μ„œ κ³΅λΆ€ν•œκ²Œ λ°”λ³΄κ°™μ•˜μŒ

 

일단 μ˜ˆμ „μ—.. λ§Œλ“€λ‹€κ°€ 만 (거의 μ‹œμž‘λ„ ν•˜μ§€ μ•Šμ€) κ²Œμ‹œνŒ ν”„λ‘œμ νŠΈλ₯Ό κ°€μ§€κ³  μ™”μŒ.

νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ ν•˜κ³  μ‹Άμ—ˆλŠ”λ° κ·Έλƒ₯ λΌμš°νŒ… κ΅¬μ„±λ§Œ λ³Ό κ±°λ‹ˆκΉŒ μžˆλŠ” κ·ΈλŒ€λ‘œ JS둜 ν•΄λ³Έλ‹€

μ§„μ§œ μ„€μΉ˜λ§Œ ν•˜κ³  λλƒˆλ˜κ±°λΌ μ™„μ „ μ΄ˆλ°˜λΆ€ν„° μžˆλŠ”λ°, λ§Œλ“€λ©΄ μ΄λ ‡κ²Œ λ˜μ–΄μžˆλ‹€.

κΈ°λ³Έ κ΅¬μ‘°λŠ” app 내에 layout, page μ΄λ ‡κ²Œ μžˆλŠ”λ° (js or ts)

layout μ—μ„œλŠ” ν•΄λ‹Ή νŽ˜μ΄μ§€μ˜ λ ˆμ΄μ•„μ›ƒμ„ κ΅¬μ„±ν•˜κ³  μ—¬κΈ°μ„œ μ € {children} μ•ˆμ΄ page μ•ˆμ˜ λ‚΄μš©λ“€μ΄ λœλ‹€. 이건 λΌμš°νŒ…μ΄ λ˜μ–΄λ„ λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

 

layout.js
export default function RootLayout({ children }) {
  return (
    <html lang="ko">
     <head>
        <title>Next.js</title>
      </head>
      <body>
        <a>μ—¬κΈ°κ°€ page.js</a>
        {children}
      </body>
    </html>
  )
}

 

 

page.js
export default function Home() {
  return (
   <div>page.js</div>
  )
}

 

 

 

 

Next.js μ—μ„œλŠ” 파일 ꡬ쑰둜 λΌμš°νŒ…μ„ 관리할 수 μžˆλŠ”κ²Œ 기본인데,

13μ—μ„œλŠ” κ·Έ 폴더λ₯Ό λ§Œλ“€κ³  κ·Έ μ•ˆμ— page(ts,js)λ₯Ό λ§Œλ“€λ©΄ κ·Έ path둜 λ§Œλ“€μ–΄μ§„λ‹€.

 

 

 

app 경둜λ₯Ό κΈ°μ€€μœΌλ‘œ app/board 폴더λ₯Ό μƒμ„±ν•˜λ©΄

λΈŒλΌμš°μ € 상 /board νŽ˜μ΄μ§€λ‘œ λ“€μ–΄κ°€λ©΄ board ν΄λ” μ•ˆμ— μžˆλŠ” page.jsx μ•ˆμ— μžˆλŠ” λ‚΄μš©μ΄ λ‚˜νƒ€λ‚œλ‹€.

 

export default function board() {
    return (
     <div>board ν™”λ©΄</div>
    )
  }

μœ„μ˜ 두 layout 뢀뢄은 λΌμš°νŒ…λ˜μ–΄λ„ κ³ μ •λ˜μ–΄μžˆλ‹€.

 

 

λ™μ λΌμš°νŒ…

 

동적인 뢀뢄듀은 폴더λͺ…을 λŒ€κ΄„ν˜Έλ‘œ κ°μ‹Έμ€ŒμœΌλ‘œμ¨ κ°€λŠ₯ν•˜λ‹€.

[id] λ‚˜ [slug] 처럼 동적인 뢀뢄듀은 Layout κ³Ό Pageλ‚˜ Head μ»΄ν¬λ„ŒνŠΈλ“€μ—κ²Œ params prop으둜 전달 λ˜μ–΄μ§„λ‹€.
예λ₯Ό λ“€μ–΄, κ°„λ‹¨ν•œ λΈ”λ‘œκ·ΈλŠ” [slug] κ°€ λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€λ“€μ˜ 동적인 뢀뢄듀이 μžˆλŠ” app/blog/[slug]/page.js 경둜λ₯Ό ν¬ν•¨ν•œλ‹€.

import Link from "next/link";

export default function Blog() {
    return (
        <>
            <h1>blog νŽ˜μ΄μ§€</h1>
        </>
    ) 
  }

 

export default function page({params}) {
    console.log(params)
    
    return <h1>post νŽ˜μ΄μ§€</h1>;
  }

 

 

 

Params

export default function postId({params}) {
    const query = params.postId
    
    return <h1>post {query} 번째 κΈ€</h1>;
  }

params λ₯Ό μ΄μš©ν•΄ κ°€μ Έμ˜¬ μˆ˜λ„ μžˆλ‹€.

 

 

 

 

searchParams 객체 μ‚¬μš©

 

http://localhost:3000/blog/1?front=event&page=1 κ³Ό 같은 μΏΌλ¦¬μŠ€νŠΈλ§μ„ κ°€μ Έμ˜¬ λ•Œ!

 

export default function postId({ params, searchParams }) {
    console.log(params)
    console.log(searchParams)

    return <h1>post {params.postId}번째 κΈ€</h1>;
  }

λ§ˆμ°¬κ°€μ§€λ‘œ {searchParams.front} ( ν˜Ήμ€ .page) λ₯Ό μ΄μš©ν•˜μ—¬ 화면에 좜λ ₯ν•  수 μžˆλ‹€.

 

 

μ•Œμ•„λ‘λ©΄ 쒋을점:

  • μ΅œμƒλ‹¨μ˜ layout은 Root-Layout이라고 λΆˆλ¦°λ‹€. 이것은 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ•ˆμ—μ„œ λͺ¨λ“ νŽ˜μ΄μ§€μ— κ³΅μœ λœλ‹€. root-layout듀은 htmlκ³Ό body νƒœκ·Έλ“€μ„ ν¬ν•¨ν•΄μ•Όν•œλ‹€.
  • μ–΄λ– ν•œ 라우트 segment라도 μ„ νƒμ μœΌλ‘œ κ·Έλ“€λ§Œμ˜ λ ˆμ΄μ•„μ›ƒμ„ μ •μ˜ν•  수 μžˆλ‹€. μ΄λŸ¬ν•œ λ ˆμ΄μ•„μ›ƒλ“€μ€ λͺ¨λ“  νŽ˜μ΄μ§€λ“€μ„ κ±Έμ³μ„œ κ³΅μœ λœλ‹€.
  • 기본적으둜 라우트 μ•ˆμ— μžˆλŠ” λ ˆμ΄μ•„μ›ƒλ“€μ€ μ€‘μ²©λœλ‹€. 각각 λΆ€λͺ¨ λ ˆμ΄μ•„μ›ƒμ€ λ¦¬μ•‘νŠΈ children prop을 μ‚¬μš©ν•˜λ©° μžμ‹ λ ˆμ΄μ•„μ›ƒμ„ 감싼닀.
  • λ„ˆλŠ” 곡유된 λ ˆμ΄μ•„μ›ƒ λ°–μ—λ‚˜ μ•ˆμ— μžˆλŠ” νŠΉμ •ν•œ 라우트 segmentλ₯Ό μ„ νƒν•˜κΈ° μœ„ν•΄ 라우트 그룹을 μ‚¬μš©ν•  수 μžˆλ‹€.
  • λ ˆμ΄μ•„μ›ƒλ“€μ€ 기본적으둜 μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ§€λ§Œ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ μ§€μ •ν•  수 μžˆλ‹€.
  • λ ˆμ΄μ•„μ›ƒλ“€μ€ dataλ₯Ό fetch ν•  수 μžˆλ‹€.
  • λΆ€λͺ¨ λ ˆμ΄μ•„μ›ƒκ³Ό μžμ‹ λ ˆμ΄μ•„μ›ƒκ°„μ˜ 데이터 전솑은 λΆˆκ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ, λ„ˆλŠ” 같은 데이터λ₯Ό ν•œλ²ˆ 이상 λΌμš°νŠΈμ—μ„œ fetch ν• μˆ˜ 있으며. λ¦¬μ•‘νŠΈλŠ” μ„±λŠ₯에 영ν–₯ λΌμΉ˜λŠ” 것 없이 μžλ™μœΌλ‘œ 쀑볡 μš”μ²­μ— λŒ€ν•œ 쀑볡을 μ œκ±°ν•  것이닀.
  • .js, .jsx, .tsx νŒŒμΌλ“€μ΄ λ ˆμ΄μ•„μ›ƒλ“€μ— 쓰일 수 μžˆλ‹€.
  • layout.js λ‚˜ page.jsλŠ” 같은 ν΄λ”μ—μ„œ μ •μ˜λ  수 μžˆλ‹€. λ ˆμ΄μ•„μ›ƒμ΄ pageλ₯Ό κ°μŒ€κ²ƒμ΄λ‹€.

μ°Έκ³  : https://velog.io/@brgndy/Next.js-Routing-Pages-and-Layouts