리액트에서는 라우터를 제공하지 않기 때문에 react-router-dom이라는 패키지를 설치하여 사용합니다.
하지만 Next.js는 폴더 위치와 page라는 컴포넌트를 토대로 라우팅이 생성됩니다.
만약 /dashboard
으로 url을 설정하고 싶다면,
app 폴더를 하위에 dashboard폴더를 생성하고 page라는 컴포넌트를 생성하면 됩니다.
그럼 폴더의 이름으로 자동으로 url경로가 설정됩니다.
마찬가진롤 하위 폴더를 생성하는 방식으로 path를 설정할 수 있습니다.
직관적으로 알기 쉽다는 장점이 있는 것 같습니다.
또 Next.js 13버전의 좋은 점으로 따로 레이아웃, 로딩페이지, 에러페이지 등 기능을 따로 설정하지 않고 파일 생성으로만 동작이 된다는 것 입니다.
<html>
, <body>
태그를 반드시 포함해야 합니다.중첩 레이아웃 상황
<html>
, <body>
을 포함해서 작성해야 합니다.'use client'
export default function GlobalError({
error,
reset,
}: {
error: Error
reset: () => void
}) {
return (
<html>
<body>
<h2>Something went wrong!</h2>
<button onClick={() => reset()}>Try again</button>
</body>
</html>
)
}
(folderName)
[folderName]
export default function Page({ params }: { params: { slug: string } }) {
return <div>My Post: {params.slug}</div>
}
Route | 예시 URL | params |
---|---|---|
app/blog/[slug]/page.js | /blog/a | { slug: 'a' } |
[...folderName]
Route | 예시 URL | params |
---|---|---|
app/blog/[...slug]/page.js | /blog/a | { slug: ['a'] } |
app/blog/[...slug]/page.js | /blog/a/b | { slug: ['a', 'b'] } |
app/blog/[...slug]/page.js | /blog/a/b/c | { slug: ['a', 'b', 'c'] } |
[]
로 한번 더 감싸준다면, Segment가 optional의 성격을 가지게 됩니다. [[...folderName]]
// 만약 Optional 기능이 없었다면
// shop페이지와 하위 페이지를 구분해서 만들어야 합니다.
- shop
- page.tsx
-[sulg]
-page.tsx
// Optional 기능 사용
- shop
- [[...sulg]]
- page.tsx
https://nextjs.org/docs/app/building-your-application/routing
잘 읽었습니다. 좋은 정보 감사드립니다.