[TIL] Next.js 13 λΌμ°ν
μ΄μ μλ 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