πŸ’£ Next.js_01 Intro, Page layout

BoriΒ·2022λ…„ 1μ›” 2일
4

Next.js

λͺ©λ‘ 보기
1/12
post-thumbnail

Next.js

μ½”λ”©μ•™λ§ˆ Next.js κ°•μ˜λ₯Ό 보고 μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.
  • React 기반의 ν”„λ ˆμž„μ›Œν¬
  • 폴더 및 파일 기반으둜 λΌμš°νŒ… 지원
  • μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ„ 지원
    • λ¦¬μ•‘νŠΈλŠ” μ„œλ²„μ‚¬μ΄λ“œλ Œλ”λ§ κ΅¬ν˜„μ΄ μ–΄λ ΅λ‹€.
$ npx create-next-app next.js-tutorial

# μ„€μΉ˜ > ν•΄λ‹Ή ν΄λ”λ‘œ 이동 > μ‹€ν–‰ 확인
$ cd next.js-tutorial
$ npm run dev

πŸ”ͺ create-next-app으둜 μ„€μΉ˜

  • 컴파일과 λ²ˆλ“€λ§μ΄ μžλ™μœΌλ‘œ λœλ‹€.
    • webpack, barbel
  • μžλ™ λ¦¬ν”„λ ˆμ‹œ κΈ°λŠ₯으둜 μˆ˜μ •ν•˜λ©΄ 화면에 λ°”λ‘œ 반영
  • μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 지원
  • μŠ€νƒœν‹± 파일 지원

πŸ”ͺ pages 폴더 μ•ˆμ— 각 νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€λ©΄ λœλ‹€.

  • λ‹€λ₯Έ μ„€μ • ν•„μš” 없이 pages 폴더 μ•ˆμ— jsνŒŒμΌμ„ λ§Œλ“€λ©΄ λΌμ΄νŒ…μ΄ λ°”λ‘œ μ μš©λœλ‹€.
    • pages > about.js 파일 생성
    • url(http://localhost:3000)에 /about을 μž‘μ„±ν•˜λ©΄ ν•΄λ‹Ή νŽ˜μ΄μ§€μ— 연결됨
      http://localhost:3000/about => about.js의 λ‚΄μš©μ΄ 보여진닀.
  • λ‹€μ΄λ‚˜λ―Ή λΌμš°νŒ…(동적 λΌμš°νŒ…)도 지원
    • pages > view 폴더 > [id].js 파일 생성
    • http://localhost:3000/view/[id] : [id]뢀뢄에 μ–΄λ–€ 문자λ₯Ό 넣어도 [id].js의 λ‚΄μš©μ΄ 보여진닀.

πŸ”ͺ Semantic UI 이용

Semantic UIμ΄λž€?

  • μ„€μΉ˜
$ yarn add semantic-ui-react semantic-ui-css
# Or NPM
$ npm install semantic-ui-react semantic-ui-css
  • μ„€μΉ˜ ν›„ _app.js 파일 상단에 import "semantic-ui-css/semantic.min.css"; μΆ”κ°€ν•΄μ„œ μ‚¬μš©

πŸ”ͺ _app.js

  • λ ˆμ΄μ•„μ›ƒμ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” _app.jsλ₯Ό 이용
    • λͺ¨λ“  νŽ˜μ΄μ§€λŠ” _app.jsλ₯Ό ν†΅ν•œλ‹€.
  • νŽ˜μ΄μ§€ μ „ν™˜μ‹œ λ ˆμ΄μ•„μ›ƒκ³Ό μƒνƒœκ°’μ„ μœ μ§€ν•  수 μžˆλ‹€.
  • componentDidCatchλ₯Ό μ΄μš©ν•΄μ„œ μ»€μŠ€ν…€ μ—λŸ¬ 핸듀링을 ν•  수 μžˆλ‹€.
  • 좔가적인 데이터λ₯Ό νŽ˜μ΄μ§€λ‘œ μ£Όμž…μ‹œμΌœμ£ΌλŠ” 것이 κ°€λŠ₯ν•˜λ‹€.
  • κΈ€λ‘œλ²Œ CSSλ₯Ό 이곳에 μ„ μ–Έν•œλ‹€.
// Props둜 λ„˜μ–΄μ˜¨ `Component`λŠ” ν˜„μž¬ νŽ˜μ΄μ§€λ₯Ό 의미
//  νŽ˜μ΄μ§€ μ „ν™˜μ‹œ `Component` Propsκ°€ λ³€κ²½λœλ‹€.
function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />;
}

πŸ”ͺ _document.js

  • Custom 'Document'

  • Next.jsμ—μ„œ μ œκ³΅ν•˜λŠ” documentλ₯Ό μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•  수 μžˆλ‹€.

  • Next.js νŽ˜μ΄μ§€λ“€μ€ λ§ˆν¬μ—… μ •μ˜λ₯Ό κ±΄λ„ˆλ›°κ³  νŽ˜μ΄μ§€λ₯Ό λ§Œλ“ λ‹€

  • <html>, <head>, <body>λ“±μ˜ νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” _document.js파일이 ν•„μˆ˜μ μ΄λ‹€

πŸ”ͺ _app.js vs _document.js

  • _app.js와 _document.jsλŠ” 역할이 λ‹€λ₯΄λ‹€
  • _app.js
    • κΈ€λ‘œλ²Œ CSS μ μš©ν•˜κ±°λ‚˜ λ ˆμ΄μ•„μ›ƒμ„ μž‘λŠ” μ—­ν• 
    • λͺ¨λ“  νŽ˜μ΄μ§€μ— μ μš©λ˜μ–΄μ•Ό ν•˜λŠ” 뢀뢄은 _app.js νŒŒμΌμ— μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • _document.js
    • μ„œλ²„μ—μ„œλ§Œ λ Œλ”λ§ λœλ‹€.
    • onClick같은 이벀트 ν•Έλ“€λŸ¬κ°€ μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • CSS도 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • Head : _app.jsμ—μ„œ μ‚¬μš©ν•˜λŠ” Head와 _document.jsμ—μ„œ μ‚¬μš©ν•˜λŠ” HeadλŠ” λ‹€λ₯΄λ‹€.
    • title같은 속성을 넣을 λ•Œ _app.jsμ—μ„œ λ„£κ±°λ‚˜ 각 νŽ˜μ΄μ§€μ—μ„œ Headλ₯Ό importν•΄μ„œ μ‚¬μš©
      => μ™œ _document.jsκ°€ μ•„λ‹ˆλΌ _app.jsμ—μ„œ μ‚¬μš©ν•˜λŠ”μ§€ 이해λͺ»ν•¨
      (μ˜μƒ λ‚˜μ€‘μ— μ„€λͺ…ν•΄μ€€λ‹€κ³  함)

5개의 λŒ“κΈ€

comment-user-thumbnail
2022λ…„ 1μ›” 2일

κ²Œμ‹œκΈ€μ—μ„œ μ‚΄κΈ°κ°€ λŠκ»΄μ Έμš”....

1개의 λ‹΅κΈ€
comment-user-thumbnail
2022λ…„ 1μ›” 2일

λ‹€μŒκΈ€μ΄ κΈ°λŒ€λ˜λŠ”κ΅°μš”!

1개의 λ‹΅κΈ€