React Router์๋ ๋ค๋ฅด๊ฒ Next๋ ํ์ผ ์์คํ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ผ๋ก ์๋ํ๋ค.
๊ธฐ๋ณธ ๋ผ์ฐํ
app ๋๋ ํ ๋ฆฌ ๋ด๋ถ์ ํด๋๋ค์ ์๋์ผ๋ก ๋ผ์ฐํ ๋๋ค.
ํด๋ ๋ด๋ถ์ page.js
๊ฐ ์์ด์ผ URL ๊ฒฝ๋ก๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
// dashboard/page.js
export default function Page() {
return (
<div>Page</div>
);
}
์ค์ฒฉ ๋ผ์ฐํ
ํด๋๋ฅผ ์ค์ฒฉํด์ ์ค์ฒฉ ๋ผ์ฐํ ์ ์ฌ์ฉํ ์ ์๋ค.
๋์ ๋ผ์ฐํ
[]
๋ฅผ ์ฌ์ฉํด์ ํด๋ ์ด๋ฆ์ ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค.
// app/blog/[slug]/page.js
export default function Page({ params }) {
return <div>My Post</div>;
}
params๋ฅผ ์ฌ์ฉํด์ URL์ ์ง์ ํ slug ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
/blog/a
๊ฒฝ๋ก๋ก ์ ์ํ๋ฉด params๋ { slug: 'a' }
๋ก ์ค์ ๋๋ค.
URL์ ํฌํจ๋ ๋ชจ๋ ๊ฐ์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ (catch-all segement)
์ค๊ดํธ๋ก ํด๋์ด๋ฆ์ ๊ฐ์ธ์ [...ํด๋์ด๋ฆ]
์ผ๋ก ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
Route๋ฅผ app/shop/[...slug]/page.js
๋ก ์ค์ ํ๊ณ /shop/a/b/c
๊ฒฝ๋ก์ ์ ์ํ๋ฉด params๋ { slug: ['a', 'b', 'c'] }
๋ก ์ค์ ๋๋ค.
URL์ ํฌํจ๋ ๋ชจ๋ ๊ฐ์ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋ (optional catch-all segment)
์ค๊ดํธ ๋๊ฐ๋ก ํด๋ ์ด๋ฆ์ ๊ฐ์ธ์ [[...ํด๋์ด๋ฆ]]
์ผ๋ก ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
Route๋ฅผ app/shop/[[...slug]]/page.js
๋ก ์ค์ ํ๊ณ /shop
๊ฒฝ๋ก์ ์ ์ํ๋ฉด params๋ {}
๋ก ์ค์ ๋๋ค.
cach-all๊ณผ์ ์ฐจ์ด์ ์ ํ๋ผ๋ฏธํฐ๊ฐ ์์ด๋ ๊ฒฝ๋ก๊ฐ /shop
์ผ๋ก ์ค์ ๋๋ค.
Route Group
app ํด๋ ๋ด๋ถ์ ํด๋๋ค์ URL ๊ฒฝ๋ก๋ก ๋งคํ๋๋ค. Route Group์ ๋ง๋ค๋ฉด ์ด ํจํด์ ๊นฐ ์ ์๋ค.
URL ๊ตฌ์กฐ์ ์ํฅ์ ๋ผ์น์ง ์๊ณ route๋ฅผ ๋ง๋ค ์ ์๋ค
ํด๋ ์ด๋ฆ์ ()
๊ดํธ๋ก ๋ฌถ์ผ๋ฉด URL์ ์๋ต๋๋ค.
๋ ์ด์์์ ํน์ route๋ฅผ ์ต์ ์ผ๋ก ์ค์ ํ ์ ์๋ค.
์๋ก์ด route ๊ทธ๋ฃน (shop)์ ๋ง๋ค๊ณ ๋์ผํ ๋ ์ด์์(account, cart)์ ๊ณต์ ํ๋ route๋ฅผ ์ฎ๊ธธ ์ ์๋ค. ๊ทธ๋ฃน ๋ฐ์ ์๋ route(checkout)์๋ ๋ ์ด์์์ ๊ณต์ ํ์ง ์๋๋ค.
์ฌ๋ฌ๊ฐ์ ๋ฃจํธ ๋ ์ด์์์ ๋ง๋ค ์ ์๋ค.
๊ฐ์ฅ ๋ฐ๊นฅ์ ์๋ layout.js๋ฅผ ์ง์ฐ๊ณ ๊ฐ route ๊ทธ๋ฃน๋ง๋ค layout.js๋ฅผ ๋ง๋ค์ด์ ์ฌ๋ฌ๊ฐ์ ๋ฃจํธ ๋ ์ด์์์ ๋ง๋ค ์ ์๋ค.
๊ฐ ๋ฃจํธ ๋ ์ด์์์๋ <html>
, <body>
๋ฅผ ๋ฐ๋์ ์์ฑํด์ฃผ์ด์ผํ๋ค.
์ฃผ์์ : route group ๋ด๋ถ์ URL ๊ตฌ์กฐ๊ฐ ๊ฒน์น๋ฉด ์๋๋ค.
์๋ฅผ ๋ค์ด, (marketing)/about/page.js
๊ณผ (shop)/about/page.js
๋ ๋ ๋ค /about
์ผ๋ก ๊ฒฝ๋ก๊ฐ ์ค์ ๋๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
'๐ฉโ๐ค ํ๋ก ํธ์๋ > nextjs' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Next.js][react-query] API Routes ์ฌ์ฉ์ ๋ฌดํ request ๋ฐ์ ์ด์ (0) | 2023.02.09 |
---|---|
[Nextjs] Linking & Navigating (0) | 2023.01.31 |
[NextJS] Pages, Layouts (0) | 2023.01.31 |