개발자

Next.js 13에서 스타일 컴포넌트 관련 질문이 있습니당

2023년 04월 22일조회 388

개인 프로젝트 진행 간에, 의문이 생기는 부분이 생겨 질문드립니다. sc로 전역을 감싸는 레이아웃 컴포넌트를 만들어 root layout 쪽에 배치를 시켜 children 을 받도록 배치를 시켰는데요, 클라이언트 컴포넌트가 너무 루트 가까이에서 생성되는 것이 아닌가…… 싶어서요. 공식 문서 상으로는 성능을 위해서는 클라컴포넌트는 최대한 리프쪽으로 배치하랫는데… 그래서 제가 이해하기론 클라 컴포넌트가 선언이 되면 그 하위 컴포넌트들음 모두 클라 컴포넌트가 되는 것으로 이해를 했는데 제대로 이해를 한 것인지 궁금합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

진성주님의 프로필 사진

next 13부터는 컴포넌트별로 렌더링 방식이 달라짐으로 상위 컴포넌트에 의해서 모든 렌더링 방식이 통일 되는 것이 아닌 각 컴포넌트 별로 렌더링 방식이 달라집니다. 그러므로 하위 컴포넌트가 모두 클라이언트 컴포넌트가 되는 것은 아닙니다. 전역을 감싸는 레이아웃 방식이 클라이언트여야하는 것은 어쩔 수 없는 것으로 공식문서으로 보이며 그러한 방식이 신경 쓰인다면 서버컴포넌트에서 사용할 수 있는 테일윈드나 vanilla-extract을 사용하시거나 sass를 사용하면 될거 같습니다. https://beta.nextjs.org/docs/styling/css-in-js https://beta.nextjs.org/docs/styling/tailwind-css https://github.com/vanilla-extract-css/vanilla-extract/issues/929 https://beta.nextjs.org/docs/styling/sass

백우혁님의 프로필 사진

백우혁

프론트엔드 개발자2023년 06월 02일

안녕하세요 궁금한게 있어서 질문드립니다. next.js 13에서 'use client' 를 선언한 클라이언트 컴포넌트의 하위 컴포넌트들은 모두 클라이언트 컴포넌트가 되는게 아닌가요? 공식문서에 클라이언트 컴포넌트 안에 서버 컴포넌트를 넣을수 없다고 나와있어서요.. 공부하다보니 헷갈리는게 많아서 질문드립니다..

커리어리 AI 봇님의 프로필 사진

Next.js의 공식 문서에 따르면, 최적화된 성능을 위해서는 클라이언트 쪽에서 사용되는 컴포넌트는 최대한 리프 노드에 배치하는 것이 좋습니다. 이는 클라이언트 쪽에서 불필요한 리랜더링을 방지하고, 필요한 부분만 업데이트하면서 성능을 최적화할 수 있기 때문입니다. 하지만, root layout 컴포넌트가 모든 페이지에 사용되는 경우, 이는 예외적인 경우일 수 있습니다. 이 경우, 모든 페이지에서 공통으로 사용되는 layout 컴포넌트를 최상위 레벨에 배치하는 것이 일반적입니다. 따라서, root layout 컴포넌트를 최상위 레벨에 배치하는 것은 일반적인 경우이며, 이 경우에는 성능 문제가 발생하지 않습니다. 하지만, 모든 페이지에서 공통으로 사용되는 layout 컴포넌트가 아닌 경우에는 최대한 리프 노드에 배치하는 것이 좋습니다. 컴포넌트가 클라이언트 쪽에서 렌더링되면, 해당 컴포넌트가 자식으로 포함하는 모든 컴포넌트도 클라이언트 쪽에서 렌더링됩니다. 이러한 동작은 Next.js의 기본적인 동작입니다. 따라서, 클라이언트 쪽에서 렌더링되는 컴포넌트는 최대한 리프 노드에 배치하여 필요한 부분만 업데이트하도록 하는 것이 좋습니다.

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!