export const getStaticProps = async () => {
const fetchData = await fetch('https://jsonplaceholder.typicode.com/posts')
const data = await fetchData.json()
return {
props: {
data,
},
}
}
export const getStaticPaths = async () => {
const fetchData = await fetch(`https://jsonplaceholder.typicode.com/posts`)
const data = await fetchData.json()
return {
paths: [
{
params: { practiceId: '1' },
},
{
params: { practiceId: '2' },
},
],
fallback: 'blocking',
}
}
fallback이 false인 경우,
getStaticPath에서 설정하지 않은 path로 이동할 경우 404페이지를 보여줌
=> getStaticPaths에 설정하는 path가 많지 않을 때 사용하면 seo 최적화와 속도 향상을 경험할 수 있음
fallback이 true인 경우,
- 먼저 사용자에게 fallback 페이지를 보여줌
- 서버에서 static하게 페이지를 생성함
- 해당 페이지를 사용자에게 보여줌
- 다음부터 해당 페이지로 접속하는 사용자에게는 static한 페이지를 보여줌
fallback이 'blocking'인 경우,
- fallback이나 loading 화면 없이 사용자에게 server side rendering한 static 페이지를 보여줌
- 이후부터 server side rendering한 static 페이지를 보여줌
직접 route 입력한 경우 => 준비된 html파일을 불러옴.
Link로 연결된 경우 => 미리 데이터의 json파일이 불러와져서 최적화 됨. 이후 Link를 이용하여 dynamic route로 이동하여도 미리 불러온 json파일의 데이터를 이용해서 화면을 구성함.
*getStaticPaths의 fallback true나 blocking을 이용해서 일부 페이지만 SSG하면 되지 않나 하는 생각이 들 수 있지만, 그건 어디까지나 dynamic page일 경우 가능함.
=> ecommerce site 의 경우
=> 이를 위해 사용할 수 있는 것이 ISR(Incremental static regeneration)
참고
https://www.youtube.com/watch?v=9P8mASSREYM&list=PLC3y8-rFHvwgC9mj0qv972IO5DmD-H0ZH&index=1