https://nextjs.org/docs/api-reference/data-fetching/getInitialProps
https://nextjs.org/docs/getting-started
Pre-rendering
https://nextjs.org/docs/basic-features/data-fetching#getstaticprops-static-generation
https://nextjs.org/docs/basic-features/data-fetching#getserversideprops-server-side-rendering
https://github.com/vercel/next.js/tree/canary/examples
https://nextjs.org/learn/basics/create-nextjs-app/setup
https://nextjs.org/learn/basics/navigate-between-pages
/pages/posts/first-post
https://nextjs.org/learn/basics/assets-metadata-css/assets
public에 담아두고, next/image의 Image를 사용하면 img 태그를 사용하는 것보다 최적화를 해준다. 빌드타임에는 영향없음
https://nextjs.org/learn/basics/assets-metadata-css/metadata
https://nextjs.org/learn/basics/assets-metadata-css/css-styling
https://nextjs.org/learn/basics/assets-metadata-css/layout-component
https://nextjs.org/learn/basics/assets-metadata-css/global-styles
https://nextjs.org/learn/basics/assets-metadata-css/styling-tips
https://nextjs.org/learn/basics/data-fetching
hydration: 페이지가 브라우저에 로드되고 자바스크립트 코드가 실행되면서 페이지가 인터렉티브하게 동작할 상태가 되는 과정
Next.js는 기볹거으로 모든 페이지를 pre-rendering한다.
모든 페이지가 외부 Data fetching을 필요로 하는 것은 아니다.
데이터가 필요한 페이지에는 getStaticProps라는 async 함수를 구현하면 된다 그럼 빌드 타임에 해당 함수를 실행해서 데이터를 페칭해온다.
단, development 모드에서는 each request마다 getStaticProps가 실행된다
https://nextjs.org/learn/basics/data-fetching/with-data
title/ data는 YAML Front Matter
https://nextjs.org/learn/basics/data-fetching/implement-getstaticprops
https://nextjs.org/learn/basics/data-fetching/getstaticprops-details
fetch()함수는 next.js가 client-side/ sever-side 모두에 polyfills 해둠
외부 api 접근/ 직접 DB 접근도 가능함
https://nextjs.org/learn/basics/data-fetching/request-time
getServerSideProps 쓰면 TTFB는 getStaticProps보다 느리다.
https://nextjs.org/learn/basics/dynamic-routes
getStaticPaths, remark, dynamic routes
/posts 하위에 md 파일이 있을때 해당 페이지를 statically generating 한다.
https://nextjs.org/learn/basics/dynamic-routes/page-path-external-data
md파일의 이름이 path가 되도록 한다
https://nextjs.org/learn/basics/dynamic-routes/implement-getstaticpaths
[{params:{id:string}}] 목록을 리턴한다. params 안에 dynamic routes key가 들어있어야함
https://nextjs.org/learn/basics/dynamic-routes/implement-getstaticprops
id별로 md에서 데이터를 읽어서 page에 props를 전달하도록 함
Render Markdown
remark로 html에 md content 보여주기
https://nextjs.org/learn/basics/dynamic-routes/dynamic-routes-details
getStaticPaths 옵션 fallback: true
const router = useRouter();
router.isFallback
https://nextjs.org/learn/basics/api-routes/api-routes-details
리액트 프레임워크다. 다양한 도구들의 모임. API가 꽤나 많다.
다 알필요는 없지만 일반적인 기능은 모두 살펴보고 심화 기능들은 읽어라도 보자
https://nextjs.org/docs/basic-features/pages
https://nextjs.org/docs/basic-features/data-fetching
https://nextjs.org/docs/basic-features/data-fetching#incremental-static-regeneration
https://nextjs.org/docs/basic-features/built-in-css-support
https://github.com/vercel/next.js/tree/canary/examples/with-emotion
Pages Pre-rendering/ Dynamic routes
getStaticProps revalidate(ISR) / redirect / notFound
getStaticPaths fallback: 'blocking'
getServerSideProps req.cookies
https://nextjs.org/docs/basic-features/layouts
여러 레이아웃들을 사용할때는 Page.getLayout 활용 가능
https://nextjs.org/docs/basic-features/image-optimization
https://nextjs.org/docs/basic-features/font-optimization
자동 적용/ 끌 수 있음
https://nextjs.org/docs/basic-features/script
https://nextjs.org/docs/basic-features/static-file-serving
https://nextjs.org/docs/basic-features/fast-refresh
React 구성요소일 경우 관련된 컴포넌트 혹은 파일만 업데이트
React 외부 요소면 전체 업데이트(full reload) 로컬 상태 유지가 default
// @refresh reset
https://nextjs.org/docs/basic-features/eslint
JS code에서 문제가 될 부분을 찾고 고칠 수 있는 도구이다. 코드가 지키고 싶은 규칙을 구성할 수 있고 여러 규칙을 합쳐서 나만의 룰을 생성 가능하다
https://nextjs.org/docs/routing/introduction
https://nextjs.org/docs/routing/dynamic-routes
https://nextjs.org/docs/routing/imperatively
next/link없이 라우터에 직접 페이지를 푸시하는 방법 router.push('/about')
https://nextjs.org/docs/routing/shallow-routing
데이터 페칭없이 프라우저에서 보이는 url만 변경
router.push('/>counter=10', undefined, {shallow:true})
다른 url에서 하면 page가 변경됨
https://nextjs.org/docs/api-routes/introduction
pages/api/*는 페이지가 아닌 api처럼 동작
client side 코드에는 추가되지 않는다.
https://nextjs.org/docs/api-routes/api-middlewares
api config 추가 혹은 다양한 미들웨어 추가 가능
https://nextjs.org/docs/api-routes/response-helpers
response에 담을 수 있는 데이터
redirect 예시 /api/hello →/api/bye with 307
https://nextjs.org/docs/going-to-production
https://nextjs.org/docs/deployment
https://nextjs.org/learn/basics/deploying-nextjs-app
https://nextjs.org/docs/authentication
https://nextjs.org/docs/testing
https://nextjs.org/docs/advanced-features/preview-mode
CMS(contens management system) 컨텐츠는 만들 때, SSG임에도 build time이 아닌 request time에 초안의 상태를 미리 볼 수 있는 기능
https://nextjs.org/docs/advanced-features/dynamic-import
js file을 다이나믹하게 임포트가능 react components도 가능
loading/ ssr/ suspense
Automatic Static Optimization 알아서 최적화 해준다
https://nextjs.org/docs/advanced-features/static-html-export
서포트 안하는 기능들 제거 혹은 대체 해야됨
image의 경우 custom or solution
https://nextjs.org/docs/advanced-features/module-path-aliases
jsconfig.json 등을 활용해서 모듈 경로의 별칭 설정
https://nextjs.org/docs/advanced-features/amp-support/introduction
AMP는 가속화된 모바일 페이지
https://amp.dev/
어떻게 빠른 렌더링을 확보하는가?
https://amp.dev/about/how-amp-works/
각종 규격을 둠(제약을 둠)
모든 스크립트는 비동기로 동작(block방지)/ 리소스의 사이즈의 지정/ 외부 리소스 렌더링 차단/ 메인 페이지에서 외부 자바스크립트 차단/ CSS는 inline으로만 사이즈 제약/ 스타일 재계산 최소화/ GPU활용하는 애니메이션만 사용 허용
https://nextjs.org/docs/advanced-features/amp-support/adding-amp-components
구성요소
https://amp.dev/documentation/components/
페이지마다 설정 가능
https://nextjs.org/docs/api-reference/next/app
https://nextjs.org/docs/advanced-features/amp-support/amp-validation 끌 수 있음
Babel https://nextjs.org/docs/advanced-features/customizing-babel-config
https://babeljs.io/docs/en/usage
존재하는 플러그인 써보기
npm install --save dev @babel/plugin-transform-arrow-functions
./node_modules/.bin/babel babel-test.js --plugins @babel/plugin-transform-arrow-function,./babel-plugin-var.js
매번 반복해서 플러그인 넣기 힘드니깐 .babelrc 파일 생성
플러그인 모음인 프리셋 써보기
npm install --save dev @babel/preset-env
./node_modules/.bin/babel babel-test.js --presets=@babel/env
.babelrc 파일 생성
AST(Abstract Syntax Tree) 소스 코드의 추상 구문 구조 트리
코드를 노드로 표현한 것
https://nextjs.org/docs/advanced-features/customizing-postcss-config