pages
폴더에 있는 파일별로 코드 스플리팅을 제공한다.CSR
은 페이지 로드 속도를 높이고 사용자 경험을 개선하는 데 중요함Link
컴포넌트를 제공import Link from 'next/link'
export default () => (
<div>
<p>Hello World!</p>
/* Link 컴포넌트 안에 <a> 기입
주소는 Link 컴포넌트에!! */
<Link href="/contact">
<a>Contact me!</a>
</Link>
</div>
)
CSR의 문제점
1. 페이지가 사용자에게 표시되는데 시간이 더 오래 걸린다.
Javascript를 해석하는 시간 + 동적으로 DOM을 그리는 시간
2. SEO에 취약하다.
국내 검섹엔진은 아직까지 js를 해석하지 못하기 때문
pages
폴더에있는 파일에 매핑되며 다른 구성이 필요하지 않는다.pages
컴포넌트들의 공통 부분으로 적용할 속성 정의function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}
export default MyApp
Component
: 서버에 요청한 페이지 (페이지 컴포넌트의 return 부분이 Component로 들어온다)pageProps
: getInitialProps, getStaticProps, getServerSideProps 중 하나를 통해 페칭한 초기 속성값_app.js
다음에 실행되며, 공통적으로 활용할 <head>
,<body>
태그 안에 들어갈 내용들을 커스텀할때 활용import Document, { Html, Head, Main, NextScript } from 'next/document'
class MyDocument extends Document {
static async getInitialProps(ctx) {
const initialProps = await Document.getInitialProps(ctx)
return { ...initialProps }
}
render() {
return (
<Html>
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
)
}
}
export default MyDocument
<Html>
, <Head>
, <Main>
, <NextScript>
요소를 필수로 리턴시켜야 한다.document.js
에서 사용하는 <Head>
는 next/head
가 아닌 next/document
에서 import
<Head>
- Next.js에서 제공하는
<Head>
를 사용하여 메타태그 또는 타이틀 수정import Head from 'next/head'; const Component = ({ Component }) => { return ( <> <Head> <meta charset="utf-8" /> <title>Head Title</title> </Head> </> ) } export default Component;
{
"presets": ["next/babel"],
"plugins": []
}