인프런 커뮤니티 질문&답변

mungyun1234님의 프로필 이미지

작성한 질문수

한 입 크기로 잘라먹는 Next.js(15+)

2.8) 페이지별 레이아웃 설정하기

getLayout이 받는 page라는 인자는 왜 "현재 페이지"인가요??

해결된 질문

24.10.07 15:47 작성

·

37

0

각 페이지에 레이아웃을 덮어씌워 보내는 함수인 getLayout이라는 메소드는 저희가 정의한 커스텀 메소드인데

이 메소드가 받는 page라는 인자는 어떻게 현재 페이지가 되는지 모르겠습니다.

 

떄문에 app.tsx에서 해당하는 Component(접속한 페이지)의 getLayout이라는 메소드가 없을 경우에 (page)=> page라는 함수를 리턴시켜 기본의 페이지를 리턴한다는 맥락도 또한 이해가 가지 않습니다.

page라는 인자는 도대체 왜 현재페이지라고 인식해서 오는지요ㅠㅜ

답변 4

1

mungyun1234님의 프로필 이미지
mungyun1234
질문자

2024. 10. 07. 15:54

아 제가 너무 어렵게 생각했네요 그냥 getLayout을 호출할떄 넣는 인자가 컴포넌트여서 그런거군요..... 하하

1

mungyun1234님의 프로필 이미지
mungyun1234
질문자

2024. 10. 07. 15:51

컴포넌트가 return 하는 것은 jsx이기 때문에 아무런 인자를 넣어도 해당 인자를현재 page로 인식하는거군요!

예를 들어 코드를 Home.getLayout=(apple:ReactNode) => { return <SearchableLayout>{apple}</SearchableLayout} 라고 개연성 없이 작성했어도 apple은 현재 페이지가 되는거구요!

0

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

2024. 10. 07. 22:38

안녕하세요 이정환입니다.

스스로 답을 찾으셨군요 👍 멋집니다!

맞아요 getLayout 호출시에 인수로 전달되는 값이 결국 컴포넌트로 표현된 페이지이기 때문입니다

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 07. 15:51

안녕하세요, 인프런 AI 인턴입니다.

Mungyun1234님께서 질문하신 내용은 Next.js에서 페이지별 레이아웃을 적용하기 위해 사용하는 getLayout 메서드가 어떻게 현재 페이지를 받아오는지에 관한 이해를 돕기 위한 질문입니다.

getLayout 메서드는 각 페이지 컴포넌트에서 정의되며, 이 메서드는 레이아웃을 적용하고자 하는 페이지를 인자로 받습니다. 이 page라는 인자는 실제로 현재 페이지 컴포넌트를 JSX 형태로 표현한 것입니다.

다음은 그 과정에 대한 간단한 설명입니다:

  1. App 컴포넌트에서의 역할:

    • App 컴포넌트에서는 Component를 사용하여 현재 열람 중인 페이지 컴포넌트에 접근합니다. 이 Component는 Next.js가 라우팅을 통해 현재 페이지에 맞는 컴포넌트를 제공합니다.
    • Component.getLayout이 정의되어 있다면, Component.getLayout 함수를 호출하여 해당 페이지에 레이아웃을 적용할 수 있습니다. 이때 인자로 넘기는 것이 Component의 JSX 표현, 즉 현재 페이지 내용입니다.
  2. page 인자의 정체:

    • page 인자는 실제로 App 컴포넌트가 렌더링하는 Component의 JSX 형태입니다. 이는 App 컴포넌트 내부에서 getLayout 메서드를 사용하는 부분에서 Component<Component {...pageProps} />로 표현하며 전달됩니다.
  3. 기본적으로 페이지를 반환하는 경우:

    • 만약 ComponentgetLayout을 정의하지 않았다면, 기본적으로 그 페이지 자체를 반환하도록 (page) => page라는 함수를 사용합니다. 이는 특별한 레이아웃 없이 본래의 페이지 내용을 유지하면서 렌더링하기 위함입니다.

이 과정은 페이지별로 다른 레이아웃을 유연하게 적용할 수 있도록 설계된 것입니다. 이를 통해 공통 레이아웃 이외에 개별 페이지에 맞는 특별한 레이아웃을 지정할 수 있습니다.

이해가 되셨기를 바라며, 더 궁금한 점이 있으시면 언제든 질문해 주세요. 그리고 관련하여 더 자세한 설명이 필요하면 아래 유사한 질문 링크에서의 답변을 참고하셔도 좋습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.