nextjs-v15

App Router - 기본

App Router

페이지 라우팅 설정

경로 폴더 생성 후 반드시 page.tsx 파일을 생성해야만 한다.

동적 경로 역시 [id] 라는 폴더 생성 후 해당 폴더 내부에 page.tsx 파일을 생성해야 한다.

  • app/book/page.tsx
  • app/book/[id]/page.tsx

쿼리 스트링 전달

app router의 경우에는 쿼리 스트링이 모두 props 로 전달된다.

이때, 객체 형태의 promise 로 전달되므로 사용하기에 앞서 타입 정의가 필요하다

export default async function Page({
  searchParams,
}: {
  searchParams: Promise<{ q: string }>;
}) {
  const { q } = await searchParams;
  return <h1>Search {q}</h1>;
}

Q. 어떻게 함수 컴포넌트에 async 키워드를 붙일 수 있는가? ⇒ 서버 컴포넌트이기 때문에가능하다.

동적 경로

동적 경로의 경우에는 param 객체 안에 promise 형태로 id가 들어있다.

export default async function Page({
  params,
}: {
  params: Promise<{ id: string }>;
}) {
  const { id } = await params;

  return <div>{id}</div>;
}

레이아웃

현재 적용된 경로의 모든 하위 경로에 똑같이 적용됨

여기서 주의할 점은, 레이아웃에 page를 전달할 수 있도록 children을 추가해 주어야 한다는 점이다.

하위에 여러 개의 레이아웃들이 존재한다면 모두 중첩해서 적용된다.

Q. 특정 페이지에만 레이아웃을 설정하고 싶다면? ⇒ 라우트 그룹 사용. 소괄호로 감싸서 그룹화함. 경로에는 아무런 영향을 미치지 않는 폴더이다. 따라서 이 폴더를 생성한 뒤에 여기로 옮겨두면 된다.