front/Error log

[NextJS - ERROR-LOG] 카카오지도 초기 렌더링 이슈

Min_dev 2023. 7. 6. 18:39
반응형

이슈

페이지 초기 렌더링 이후 콘서트 디테일 페이지 접근했을 카카오지도 렌더링 안되는 이슈

 

원인

개발자 도구에서 카카오지도부분 확인했을 스크립트 파일이 로드가 안됨을 확인

export default function KakaoMap({ x, y }: { x: string; y: string }) {
  const API_KEY = process.env.NEXT_PUBLIC_KAKAO_API_KEY;
  const KAKAO_SDK_URL = `//dapi.kakao.com/v2/maps/sdk.js?appkey=${API_KEY}&autoload=false`;
  console.log(x);
  return (x && y) ? (
    <>
      <Script src={KAKAO_SDK_URL} />
      <Map
        center={{ lng: Number(x), lat: Number(y) }}
        className="w-full h-[450px]"
      >
        <MapMarker position={{ lng: Number(x), lat: Number(y) }} />
        <MapTypeControl />
        <ZoomControl />
      </Map>
    </>
  ) : null;
}

기존 코드는 카카오 지도를 렌더링하는 컴포넌트에 스크립트 코드를 넣었음. 기존에는 카카오지도가 삽입되어 있는 페이지에 들어가야 카카오지도 스크립트 코드가 받아졌기 때문에 가장 처음 콘서트 디테일 페이지에 들어갔을 스크립트 코드가 받아지면서 지도 렌더링이 안되고 이후부터 렌더링이 되었던 .

 

해결

해결방법은 콘서트 디테일 페이지에 들어가기전 , 페이지에 들어가는 순간 스크립트 코드가 받아지도록 변경하면 .

const API_KEY = process.env.NEXT_PUBLIC_KAKAO_API_KEY;
const KAKAO_SDK_URL = `//dapi.kakao.com/v2/maps/sdk.js?appkey=${API_KEY}&autoload=false`;

export const metadata = {
  title: "Consert-App",
  description: "Generated by create next app",
};

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en" className={sans.className} suppressHydrationWarning={true}>
      <Script src={KAKAO_SDK_URL} />
      <body className="w-full min-w-[320px] max-w-screen-2xl mx-auto overflow-auto p-4">
        <AuthContext>
          <YoutubeApiProvider>
            <ConsertApiProvider>
              <Header />
              <main>{children}</main>
              <Footer />
            </ConsertApiProvider>
          </YoutubeApiProvider>
        </AuthContext>
      </body>
    </html>
  );
}

다음과 같이 최상위 레이아웃 파일로 스크립트 코드를 이동시켰고, 메인페이지가 렌더링 스크립트 코드가 받아지도록 코드 구성을 변경하여 해결됨.

 

정상적으로 스크립트 파일이 받아져서 초기 렌더링시에도 카카오지도 렌더링되는 것 확인.

반응형