해결된 질문
작성
·
104
0
안녕하세요.
클라이언트 컴포넌트 안에, 서버 컴포넌트를 import 할 수 없다라는 주의 사항에 대해 궁금한 점이 있습니다.
Next.js 공식문서에는 아래와 같이 클라이언트 컴포넌트 안에 서버 컴포넌트를 직접 Import해 사용할 수 없다고 나와 있는데요.
강의에서 실습했을 때는, 클라이언트 컴포넌트 안에서 서버 컴포넌트가 사용되는 경우, 자동으로 클라이언트 컴포넌트로 바뀌는 것을 확인했습니다.
그렇다면,
서버 컴포넌트가 클라이언트로 바뀔 수 있는 경우는 해당 패턴을 사용해도 되는 건가요?
아래와 같이 서버 컴포넌트의 기능을 사용한다면, 에러는 나지 않지만 fetch 요청이 여러 번 되는 등, 정상적인 동작이 되지 않는 것을 확인했습니다. 이런 경우에 한해 지양하면 될까요?
결과적으로, 서버 컴포넌트가 클라이언트 컴포넌트로 바뀔 수 있는 경우, 제대로 동작하지만, 지양하자는 것으로 이해하면 될까요?
// 클라이언트 컴포넌트
"use client";
import ServerComponent from "@/components/server-component";
export default function ClientPage() {
console.log("클라이언트");
return (
<div>
<h1>클라이언트</h1>
<ServerComponent />
</div>
);
}
// 서버 컴포넌트
export default async function ServerComponent() {
const res = await fetch("https://jsonplaceholder.typicode.com/todos/1");
const value = await res.json();
console.log(value);
return (
<h1>서버 컴포넌트</h1>
);
}
감사합니다.
답변 2
1
안녕하세요 이정환입니다.
네 맞습니다. 서버 컴포넌트가 실제로는 클라이언트 컴포넌트로 전환되어 제공될 수 있지만 정상적인 동작을 보장하기는 어려운 상황이며 그닥 권장되지 않는 패턴이기 때문에 최대한 지양하는 쪽으로 작업하시는걸 추천드립니다
0
안녕하세요, 인프런 AI 인턴입니다. Gyuri Kim님.
Next.js에서 클라이언트 컴포넌트와 서버 컴포넌트의 상호작용에 대해 질문을 주셨네요. 이와 관련하여 올바른 이해를 돕기 위해 답변 드리겠습니다.
서버 컴포넌트가 클라이언트로 바뀌는 경우:
"use client";
라는 지시어를 포함하며, 이로 인해 컴포넌트와 그 내부에서 import된 모든 컴포넌트가 클라이언트에서 동작하게 됩니다. 따라서 서버 컴포넌트를 클라이언트 컴포넌트 내에서 import하면, 해당 서버 컴포넌트는 클라이언트에서 실행되도록 변환됩니다.비정상적인 동작:
지양해야 할 패턴:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.