s e o p p o r t . l o g

Today I Learned

2024. 03. 28 TIL - 트러블 슈팅

Seo Ji Won 2024. 3. 28. 22:33

 

문제 상황

  • 웹 페이지를 클라이언트 컴포넌트로 구성하고, useSearchParams 훅을 사용해 쿼리스트링 값을 받아 서버 컴포넌트에 props로 내려주려 함.
  • 서버 컴포넌트에서 이 props를 사용해 데이터를 fetch하려 했으나, 클라이언트 컴포넌트에 서버 컴포넌트를 임포트하면 서버 컴포넌트도 클라이언트 컴포넌트가 되버려서 서버 컴포넌트의 로직이 정상적으로 실행되지 않음.
  • 페이지를 서버 컴포넌트로 설정하는 것이 맞다고 판단됨.
  • 그럼 어떻게 서버 컴포넌트에서 쿼리스트링 값을 어떻게 가져오지?

해결 방법

  • useSearchParams 훅 등을 사용하지 않고, 페이지에서 쿼리스트링 값을 직접 함수의 props로 받는 방식으로 문제를 해결할 수 있었다.
  •  
export default async function ReservePage({ searchParams }: { searchParams: { classId: string } }) {
  const classId = searchParams.classId;
  const classInfo = await fetchClassInfo({ classId });

  return (
    <div className="w-full h-full">
      <h1 className="text-xl">예약하기</h1>
      <ClassInfo classInfo={classInfo} classId={classId} />
      // ... 중략
    </div>
  );
}