개발자

next.js 특정 페이지에 컴포넌트 미출력 기능 구현 이슈(use client 사용)

2023년 09월 10일조회 352

로그인페이지(/user-page)에서 footer컴포넌트를 안띄우는 기능을 구현하고 싶어 footer 컴포넌트를 csr 방식으로 사용하도록 'use client' 줬습니다. 근데 error ReferenceError: window is not defined 라는 에러가 뜨면서 적용이 안되네요ㅠㅠ nextjs는 ssr이니까 window에 접근하기 위해선 'use client'를 주면 된다고 들었는데 왜 안되는걸까요?? 찾아보니까 useEffect 쓰라해서 useEffect도 써봤는데 에러가 뜨진않지만 여전히 적용안되더라구요. 문제점 알려주시면 감사하겠습니다ㅠㅠㅠ <footer.tsx 파일> 'use client' import React, { useEffect } from 'react' import style from '../styles/footer.module.scss' const Footer = () => {     if (window.location.pathname === '/user-page') return null return ( -생략- ) } <루트 layout.tsx 파일> 'use client' export default function RootLayout({     children, }: {     children: React.ReactNode }) {   return (         <html lang="ko">             <body className={inter.className}>                 <div className="wrap bg-white">                     <Header />                     {children}                     <Footer />               </div>             </body>         </html>     ) }

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

답변 3

아발란체님의 프로필 사진

footer가 필요한 도메인들의 그룹 최상위 레이아웃에 Footer 컴포넌트를 넣고 로그인페이지 레이아웃에는 안넣으면 되지않을까요?? Rootlayout에는 Footer를 넣지말구영 참고로 Rootlayout 파일은 왠만하면 서버컴포넌트를 유지하는것을 추천드립니다.

털먹는토끼님의 프로필 사진

털먹는토끼

작성자

해당없음 해당없음2023년 09월 10일

근데 로그인페이지말곤 모든 도메인에서 footer 컴포넌트를 사용해서요... 이거 하나때문에 프로젝트 최상위 Rootlayout을 사용하지않고 로그인페이지그룹(사실 페이지하나..)의 layout, footer컴포넌트를 사용하는 나머지 모든 페이지그룹의 layout 이렇게 나눠서 운영하는것이 과연 효율적인가 싶기도해서 다른 방법이 없나 물색중이었습니다. 아무쪼록 답변 정말 감사합니다!!

최진님의 프로필 사진

okky에도 동일한 질문 올리셨던데 답변드렸습니다.

Ed님의 프로필 사진

usePathname 훅 사용하시면 됩니다. https://nextjs.org/docs/app/api-reference/functions/use-pathname 해당 오류가 발생하는 이유는 랜더링 시점과 관련이 있을거 같은데 함수의 선언시점에는 브라우저의 window 객체에 참조가 불가능해서 일겁니다.

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

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

또는

이미 회원이신가요?

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

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

새로운 질문 올리기

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