본문 바로가기

Study/Next

what is _document.js?

before start

_document.js에 대해 알아보기 전에, _app.js가 무엇이었는지 간단히 정리해 보자. _app.js는 next.js 어플리케이션의 shell(껍질)이다.

 

// pages/_app.js
import Layout from '../components/layout/layout';
import '../styles/globals.css';

function MyApp({ Component, pageProps }) {
  return (
    <Layout>
      <Component {...pageProps} />
    </Layout>
  );
}

export default MyApp;

 

  1. next.js에 의해 <Component>는 자동으로 렌더링 해야 할 페이지 컴포넌트가 된다.
  2. 모든 페이지 컴포넌트에 적용해야 하는 스타일링, Head 태그 등을 여기에서 설정할 수 있다.
  3. 즉, 어플리케이션 html 페이지의 root element 라고 볼 수 있다.

what is _document.js?(공식문서)

document.js 파일은 어플리케이션의 전체 html을 구성할 수 있는 파일이다. app.js와 마찬가지로, pages 폴더의 바로 하위에 속해야 한다.

 

// pages/_document.js
import Document, { Html, Head, Main, NextScript } from 'next/document'

class MyDocument extends Document {
  render() {
    return (
      <Html>
        <Head />
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    )
  }
}

export default MyDocument

 

  1. 위의 render 함수가 반환하는 값이 next.js가 기본으로 설정하고 있는 값이다.
  2. next/head 모듈의 Head와 next/document 모듈의 Head는 다른 컴포넌트이다.
    • 전자는 모든 페이지 컴포넌트에서 적용할 수 있지만, 후자는 document.js 파일에서만 사용 가능하다.
  3. 아래와 같이 속성을 추가하거나, 태그 자체를 추가할 수 있다.

 

<Html lang="en" />
<body>
	<Main />
		<div id="modal" />
		<NextScript />
</body>

 

document.js 파일을 설정한 후에는, 개발 서버를 재시작해야 변경된 내용을 확인해 볼 수 있다.

궁금한 점

  • 공식문서에 보면 document를 함수형 컴포넌트로도 작성할 수 있는데, 내가 연습하고 있는 프로젝트에서는 에러가 남.
  • 혹시 next.js 버전이 안맞아서 그런가…?

'Study > Next' 카테고리의 다른 글

mongoDB  (0) 2022.10.23
API route  (0) 2022.10.20
optimization with <head> & <image>  (1) 2022.10.18
client side data fetching  (0) 2022.10.17
pre-rendering  (0) 2022.10.14