React Portal의 SSR 대응법

  • react-portal 라이브러리가 Next.js의 서버사이드에서도 동작하도록 하기위한 코드입니다.
  • client 컴포넌트로 설정 후, 클라이언트 사이드에서만 확실히 렌더링하도록 조치하였습니다.
import { ReactNode, useEffect, useState } from 'react'
import { Portal } from 'react-portal'

export const PORTAL_ID = 'portal'

const MyPortal = ({ children }: { children: ReactNode }) => {
  const [initialized, setInitialized] = useState(false)

  useEffect(() => {
    setInitialized(true)
  }, [])

  return initialized ? <Portal node={document && document.getElementById(PORTAL_ID)}>{children}</Portal> : null
}
export default MyPortal