'리액트에서 next.js로 이전하던중 생긴 이슈들' 블로그 참고
정적과 동적의 차이점으로는 언제 html 파일을 생성하는가
import Link from 'next/link'
<Link as={`/p/${props.id}`} href='/이동할 페이지'>
<a> About page</a>
//또는
<button> About page</button>
</Link>
Static Generation 정적 생성,
미리 만들어 둬도 되는 경우
- 마케팅 페이지
- 블로그 게시물
- 제품 목록
- 도움말, 문서
Server-side Rendering 서버 사이드 렌더링,
항상 최신상태 유지
- 관리자 페이지
- 분석 차트
import {useRouter} from 'next/router'
const () => {
const router = useRouter()
return(
<button onClick={() => router.push('/about')}></button>
)
}
default: router.push(url, as, options)
#### router.prefetch
```router.prefetch(url, as)```
- 더 빠른 클라이언트 측 전환을 위해 페이지를 미리 가져온다.
- link가 없을때만 가능
#### router.beforePopState(url, as, options)
- 라우터를 작동하기전에 이벤트를 넣을때 사용
- cb: 들어오는 이벤트에 실행하는 기능
#### shallow routing
- 새로고침 하지 않고 url을 불러올 수 있는 next/js의 기능, 페이지 리렌더링
- next.js에서 라우팅이 일어나면 getServerSideProps, getStaticProps, getInitialProps를 실행시키지만 이를 실행시키지 않고 현재 url을 업데이트 하는 것이 shallow routing 이다
- 위에 router.push 참고
- shallow: true 값을 주면 활성화가 된다
```js
import { useEffect } from 'react'
import { useRouter } from 'next/router'
function Page() {
const router = useRouter()
useEffect(() => {
router.push('/?counter=10', undefined, { shallow: true })
}, [])
useEffect(() => {
}, [router.query.counter])
}
export default Page
레퍼런스
상황에 따라 맞는 api 사용하기
정적생성 : 사전 렌더링/정적페이지에 사용
getStaticProps() : 빌드할 때 데이터를 가져옴
getStaticPaths() : 데이터를 기반으로 사전 렌더링(pre-render) 할 동적 경로를 지정
getStaticProps()와 getStaticPaths() 는 항상 짝으로 사용하자
SSR
getServerSideProps() :
import { GetStaticPaths } from 'next'
export async function getStaticPaths() {
return {
paths: [
// { params: { ... } }, // See the "paths" section below
{ params: { id: '1' } }, // pages/post/[id].tsx
{ params: { categori: '맛집',id :'1' } }, // pages/post/[categori]/[id].tsx
{ params: { slug: ['a','b','c'] } }, // pages/post/[...slug].tsx => /post/a/b/c
{ params: { slug: false }} // pages/[[...slug]] 폴더일때, 사이트 루트 페이지로 설정,
],
fallback: true or false // See the "fallback" section below
};
}
getServerSideProps
- page가 요청 받을 때 마다 호출됨
- SSR 개념
- pre-render가 꼭 필요한 동적 데이터가 있는 페이지에서 사용
getStaticProps
- 빌드시 딱 한번 호출되므로 이후 수정이 불가능
- SSG(Static Site Generation) 개념
- 빌드 후 바뀌지 않는 내용(고정된 내용)이 있는 page가 있는 경우에만 사용