next.js 공부 중에 getStaticProps를 알게되었는데 조금 이해가 더 필요해서 정리하기로 했다.
react로 개발을 하면서 data를 가져오게되면 처음에는 undefined가 되고 두번째에 값이 들어오는것을 알 수 있다.
그 이유는 useEffect로 가져오는 data fetch함수가 최초렌더링시에는 실행되지 않고 jsx가 한번 실행되고 나서 함수가 실행된다.
그래서 그 이유로 화면이 깜빡거리거나 값이 없다고 뜬다.
-> 이러면 사용자의 경험이 안좋아질 수 있다.
그래서 이러한 문제를 해결하기 위해서 사전렌더링기능(pre-rendering)을 제공하는 Next.js가 나왔다.
next.js? : 렌더링 이전에 미리 만들어놨다가 렌더링 시 바로 값이 보일 수 있도록 하는 기능을 가진 리액트 프레임 워크다.
PreRendering을 제공하는 두가지 방식이 있다.
그게 바로 SSG , SSR 이다.
1.Static Site Generation
최초 빌드 시에 딱 한번만 호출이 된다. 그래서 최초에 빌드된 값이 계속해서 렌더링 된다. -> 정적인 페이지
SSR처럼 서버로부터 완성된 html을 받지만 파일 생성 시점이 빌드때다. SSR과의 차이점이다.
즉, npm run build 시 pages에 작성한 파일들이 미리 생성되어 정적문서로 가지고 있다.
그럼 업데이트를 어떻게 하나?
: revalidate로 할 수 있다. ( 10으로 설정해놓으면 10초뒤에 업데이트된 데이터가 렌더링된다)
export async function getStaticProps(context) {
return {
props: {}, //여기 props가 컴포넌트의 props로 간다.
}
}
2.Server Side Rendering
: 요청이 들어올때마다 서버에 요청을 하며 그때마다 사전 렌더링을 한다. 동적데이터에 사용하기 더 용이
다만 서버쪽에서 렌더링을 하는것이므로 parameter로 context를 받아서 req,res변수를 저장해둬야한다.
const Lists = [
{
id: 1,
title: "first list",
},
{
id: 2,
title: "second list",
},
];
const Component = (props) => {
return (
<>
{props.data.map((data) => (
<h2 key={data.id}>{data.title}</h2>
))}
</>
);
};
export async function getServerSideProps(context) {
const req = context.req; //이렇게 변수를 지정해줘야한다.
const res = context.res;
return {
props: {
data: Lists,
},
};
}
export default Component;
//다른블로그에서 참고
상황에 따라서 선택에서 사용하면 된다.
블로그와 같은 항상 같은 내용을 불러와야하는 정적인 성격의 경우 SSG를 사용하면 되고,
그때그때 마다 입력값이 나와야하거나 업데이트내용이 나와야할 경우 SSR을 사용하면 될꺼같다.😎
'TIL✨' 카테고리의 다른 글
TIL (0) | 2023.02.11 |
---|---|
최종프로젝트 시작_TIL (0) | 2023.02.11 |
react-component의 실행 순서 TIL (0) | 2023.01.31 |
가져온 좋아요 수를 어떻게 정렬할까 TIL (1) | 2023.01.29 |
좋아요숫자를 어떻게 가지고 올것인가 TIL (0) | 2023.01.29 |