Next.js ์ Router ๋ file-system ๊ธฐ๋ฐ
- file-system : ํ์ผ์ ๋ง๋ค๋ฉด ๊ทธ ์ฆ์ ๋ผ์ฐํฐ๋ก ์ธ์ง๋๊ณ ์ฃผ์๊ฐ ๋งตํ์ด ๋ฉ๋๋ค.
- pages/
- src/pages/
๋ฆฌ์กํธ์์๋ ๋ณ๋์ Router ๋ฅผ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง, Next.js ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต์ ํฉ๋๋ค.
pages/ OR src/pages ๋ ์ค ์ฐ์ ์์๋?
- ์ฐ์ ์์๋ pages/ ๊ฐ ์ฐ์ ์ ๋๋ค.
pages/index.js
import Link from 'next/link'
import { useEffect, useState } from 'react'
export async function getStaticProps(){
console.log('server')
return {
props : {time : new Date().toISOString()}
}
}
export default function Home() {
return (
<div>
<h1><Link href="/ssg">SSG๋ก - pages -</Link></h1>
<h1><Link href="/isr">ISR๋ก - pages -</Link></h1>
</div>
)
}
src/pages/index.js
import Link from 'next/link'
import { useEffect, useState } from 'react'
export async function getStaticProps(){
console.log('server')
return {
props : {time : new Date().toISOString()}
}
}
export default function Home() {
return (
<div>
<h1><Link href="/ssg">SSG๋ก</Link></h1>
<h1><Link href="/isr">ISR๋ก</Link></h1>
</div>
)
}
- ํ๋ฉด์๋ pages ์ index.js ๊ฐ ๋์ต๋๋ค.
์ฆ, pages ํด๋๊ฐ ์๋ค๋ฉด, src ํด๋ ์์ pages ๋ ๋ฌด์๊ฐ ๋ฉ๋๋ค.
Nested routes
- pages/product/first-item.js => /product/first-item
- pages/settings/my/info.js => /settings/my/info
Tip, next.js ๋ ์ ๋ ๊ฒฝ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅ ํฉ๋๋ค.
- ํ์ผ ๊น์ด๊ฐ ๊น์ด์ง์๋ก ../ ์ ํ๋ ์ผ์ด ๋ง์์ง๋๋ค.
- ํ์ง๋ง ์๋ ์ค์ ์ ํ๋ฉด ์์ฝ๊ฒ ์ ๋ ๊ฒฝ๋ก๋ก ์ ๊ทผ์ด ๊ฐ๋ฅ ํฉ๋๋ค.
jsconfig.json
{
"compilerOptions" : {
"baseUrl" : "src"
}
}
first-item.js
// import Hello from '../../src/components/Hello'; // ๊ธฐ์กด
import Hello from '/src/components/Hello';
const first_item = () => {
return (
<>
<h1>first_item</h1>
<Hello/>
</>
)
}
export default first_item;
- ์์ ์ด๋ฏธ์ง ์ฒ๋ผ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋์ต๋๋ค.
Nested routes ์ฃผ์ํ ์
/product/first-item ๊น์ง๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง, product ๋ก๋ ์ ๊ทผ์ด ์๋ ๊น?
์ ๋ต์ ๊ทธ๋ฅ /product ๋ฅผ ์ ๋ ฅํ๋ฉด 404 ๊ฐ ๋์ต๋๋ค.
- product ์ ๋ฐ๋ก ์ ๊ทผํ๊ณ ์ถ์ผ๋ฉด ํด๋น index.js ๊ฐ ์์ด์ผ ํฉ๋๋ค.
slug
- pages/category/[slug].js => /category/:slug (ex. /category/food )
- pages/[username]/info.js => /:username/info (ex. /hyunho/info )
๋๊ดํธ๋ฅผ ํ๊ณ ์ด๋ค ๊ฐ์ ๋ฃ์ผ๋ฉด ๊ทธ ๊ฐ์ ์์ผ๋์นด๋์ฒ๋ผ ๋์์ ํฉ๋๋ค.
- ์ง๊ธ์ slug ๋ฅผ ํ ๋์ค๋ง ์ฌ์ฉํ์ง๋ง [...slug].js ํ๋ฉด
- (ex. /cart/2022/06/24) ๋ฌดํํ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ ํฉ๋๋ค.
์ ๋ฆฌ
- Router -> File system ์ ํ ๋๋ก ๊ตฌํ
- pages/ ํน์ src/pages -> pages/ ๊ฐ ์ฐ์ ์์, ํ๋๋ง ๊ฐ๋ฅ
- ํ๋ก์ ํธ ์ค์ -> jsconfig.json(์ ๋๊ฒฝ๋ก)
- Slug -> ๋ค์ํ ์๊ณ์ Dynamic ์ ๊ณต
์ฐธ๊ณ
'๐ Front-End > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Next.js - Assets, Meta data, CSS (0) | 2022.10.26 |
---|---|
Next.js - Link (0) | 2022.10.26 |
Next.js - Pre Rendering (0) | 2022.10.26 |
Next.js - Data Fetching (0) | 2022.10.26 |
React์ ๋ฌธ์ ์ ๊ณผ NextJS์ ๋์ (0) | 2022.10.26 |