여러방식이 있어서 그 사용용도에 맞는 방식을 사용한다.
보통 리액트에서는 useEffect안에서 가져오지만 Nextjs에서는 아래와 같은 방법으로 가져온다.
getStaticProps
Static Generation으로 빌드할 때 데이터를 불러오는 방식getStaticPaths
Static Generation으로 데이터에 기반해서 pre-render시 특정 동적인 라우팅 구현 (pages/post/[id].js)getServerSideProps
ServerSideRendering으로 요청이 오면 데이터를 불러온다.아래처럼 함수를 export하면 리턴되는 props를 가지고 그 페이지를 build time에 미리 렌더링한다.
export async function getStaticProps() {
return {
props: { // 이 안에있는거 build time에 미리 렌더링
posts,
}
}
}
동적인 라우팅이 필요하면 이 방식을 사용, 경로 리스트를 정의하고 HTML build시간에 렌더링 된다. (정적으로 호출하는 경로들을 가져온다.
// 어떤 경로가 프리렌더될지 정하고
// ex) 경로가 pages/posts/[id.js]면 아래처럼 하면
// 빌드하는 동안에 /posts/1하고 /posts/2를 생성한다.
export async function getStaticPaths() {
return {
paths: [
// params
{ params: { id: '1' } },
{ params: { id: '2' } }
],
fallback: true // false of blocking
}
}
params
fallback
요청을 보낼 때 마다 리턴되는 데이터를 프리렌더한다.
export async function getServerSideProps(context) {
return {
props: {},
}
}
요청할 때 데이터가 필요한 페이지를 미리 렌더링할 때 사용, 서버가 모든 요청에 대한 결과를 계산, 추가 구성없이 CDN에 의한 결과를 캐시할 수 없어서 첫번째 바이트까지 getStaticProps보다 느리다.