StyledComponents가 next에서 적용이 잘 안될 때 해결방법

Jake Seo·2020년 4월 24일
0

react-knowledge

목록 보기
2/3

문제

StyledComponents를 적용한 이후, Hot-Reloading시에는 잘 적용이 되지만 페이지를 새로고침하면 제대로 적용이 안 되어있다.

해결방법

next의 pages 디렉토리 및 _document.js에 StyledComponents 서버사이드 렌더링을 해준다.

아래와 같은 형식으로 작성해주면 된다.

import Document, {Html, Head, Main, NextScript} from 'next/document';
import {ServerStyleSheet} from 'styled-components';

class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const sheet = new ServerStyleSheet();
    const originalRenderPage = ctx.renderPage;

    try {
      ctx.renderPage = () =>
        originalRenderPage({
          enhanceApp: (App) => (props) => sheet.collectStyles(<App {...props} />),
        });

      const initialProps = await Document.getInitialProps(ctx);
      return {
        ...initialProps,
        styles: (
          <>
            {initialProps.styles}
            {sheet.getStyleElement()}
          </>
        ),
      };
    } finally {
      sheet.seal();
    }
  }

  render() {
    return (
      <Html>
        <Head />
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}

export default MyDocument;
profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글