MainLayout이 중첩되어 뜨는 문제
89
2 câu hỏi đã được viết
혼자서도 해보고 '레이아웃 분리하기 - 풀이' 강의를 보고 똑같이 해도 (with-layout) 그룹에 생성한 Layout(MainLayout)은 아래와 같이 MainLayout 하위에 MainLayout이 또 있는 것처럼 뜨는데 이건 정상적인 건가요?

(auth) 그룹에 생성한 Layout(AuthLayout)은 아래와 같이 AuthLayout이 하나만 있어서 어떤 게 정상인지, 원래 이런 건지 알고 싶습니다.

프로젝트 폴더 구조는 다음과 같습니다:

Câu trả lời 2
0
안녕하세요.
개발자 도구를 직접 열어 트리 구조까지 확인해보셨다니 정말 인상적입니다.
우선 궁금해하신 부분에 대해 먼저 답변드리면, 리액트 개발자 도구에 표시되는 단순한 라벨링 차이일 뿐 실제로 컴포넌트가 두 번 실행되는 것은 아니므로 걱정하지 않으셔도 됩니다.
조금 더 설명드리자면, DevTools는 우리가 작성한 컴포넌트만 보여주는 것이 아니라 Next.js가 내부적으로 라우팅을 위해 감싸는 래퍼 컴포넌트들까지 함께 표시합니다.
/ 경로의 경우 (with-layout)이 Header와 Footer를 포함한 레이아웃이기 때문에, Next.js 내부 래퍼와 실제 레이아웃이 함께 보이면서 WithLayout이 두 번 나타나는 것처럼 보일 수 있습니다.
반면 /login의 AuthLayout은 children을 그대로 전달하는 비교적 단순한 구조이기 때문에, 트리에서는 AuthLayout 한 번과 OuterLayoutRouter(Next.js 내부 래퍼) 형태로 표시됩니다.
따라서 이는 화면이 실제로 두 번 렌더링되는 문제가 아니라 DevTools의 표시 방식 차이에서 비롯된 현상입니다.
추가로 만약 (auth)/layout.tsx 파일도 단순하게 children만 렌더링하는 게 아니라 다른 태그를 추가해보면 똑같이 중첩된 것처럼 보인답니다 😀
(예를들면 아래처럼..)
export default function AuthLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<>
<h1>ddd</h1>
{children}
</>
);
}
0
안녕하세요, 인프런 AI 인턴입니다. hwnii님.
MainLayout이 중첩되어 나타나는 문제에 대해 궁금해 하신 것 같습니다. 리액트나 Next.js에서는 레이아웃 구조를 어떻게 설정하느냐에 따라 컴포넌트가 중첩되어 렌더링될 수 있습니다.
이유와 해결 방법
중첩된 레이아웃:
- Next.js에서 각 경로에 대해 레이아웃을 정의할 수 있고, 특정 그룹의 경로에 대해 중첩 레이아웃이 적용될 수 있습니다. 이는 상위 레이아웃이 하위 경로에서도 적용되기 때문입니다.
- 정상적인 경우라면 프로젝트 폴더를 분석할 때 특정 그룹의
layout.tsx가 상위 경로 레이아웃과 결합되어 나타날 수 있습니다.
- Next.js에서 각 경로에 대해 레이아웃을 정의할 수 있고, 특정 그룹의 경로에 대해 중첩 레이아웃이 적용될 수 있습니다. 이는 상위 레이아웃이 하위 경로에서도 적용되기 때문입니다.
원하는 레이아웃 구조 설정:
- 각각의 경로에 대해 명확하게 레이아웃을 설정하여 중첩을 피하고자 할 경우, 해당 레이아웃 구조가 올바르게 설정되어 있는지 확인해야 합니다. 복수의 레이아웃이 중첩되어야 하는 경우가 아니라면, 특정 페이지나 그룹이 상위 레이아웃을 상속받지 않도록 설정하는 것도 고려할 수 있습니다.
- 각각의 경로에 대해 명확하게 레이아웃을 설정하여 중첩을 피하고자 할 경우, 해당 레이아웃 구조가 올바르게 설정되어 있는지 확인해야 합니다. 복수의 레이아웃이 중첩되어야 하는 경우가 아니라면, 특정 페이지나 그룹이 상위 레이아웃을 상속받지 않도록 설정하는 것도 고려할 수 있습니다.
프로젝트 폴더 구조:
- 올바르게 설정된 폴더 구조인지 다시 한번 확인해 보시는 게 좋습니다.
(with-layout),(auth)와 같은 폴더가 각각의layout.tsx파일을 포함하고 있다면, 이 레이아웃이 각각의 그룹이나 페이지에 대해 어떻게 적용되는지가 중요합니다. 중첩을 피하려면 리팩토링이 필요할 수 있습니다.
위와 같은 분석과 해결 방안을 통해 정상적으로 레이아웃이 나타날 수 있도록 구조를 재검토하셔야 할 것입니다. 추가적으로 Next.js 공식 문서나 관련된 학습 자료를 통해 레이아웃에 대한 이해를 더 깊게 하실 수 있습니다.
추가적인 문서를 위해 인프런의 강의 Q&A에서 다음과 같은 유사한 질문과 답변을 참조하실 수 있습니다:
- 컴포넌트 중첩 렌더링 및 해결 방법
- Next.js 레이아웃 구성 이해하기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
rules 파일 관련 질문입니다!
0
3
1
51강 7분 custom 스타일 질문
0
6
0
모델 차이 궁금증
0
11
1
settings.json 파일
0
9
1
플러그인 설치 관련
0
5
1
GIT과 VSCODE
0
11
1
팀& 서브 에이전트 실활용 방법은 어디에서 볼 수 있을까요?
0
13
1
선생님 강의토대로 개발중인데 질문이 하나있습니다 급함
0
19
2
To-Do App
0
13
0
74. 데이터 캐시 - 1 (이론) 강의 영상 누락
0
52
1
lucide react 아이콘 설치
0
67
2
02-04 layout.tsx 구조가 달라요
0
84
2
10-6 실습 할 수 없습니다..
0
105
1
그림 예제는 따로 제공이 안되나요?
0
87
1
cacheLife에 대한 질문입니다
0
81
1
(제보) 쿠키를 브라우저 개발 환경에서 직접 삽입했을 때 나오지 않는 현상
0
85
2
디스코드 채널 초대 링크
0
96
1
revalidatePath 질문 있습니다.
0
79
2
쿠키와 헤더
0
72
2
구지 react를 사용하는 이유가 그럼 있는가?
0
93
1
FormEvent가 deprecated 되었다고 합니다.
0
354
2
터보백이 안보입니다
0
74
2
젯브레인 웹스톰(jetbrains webstorm) 사용하시는 분들 참고
0
128
2
소스 코드 다운로드는 어디서 하나요.
0
88
2

