React_κΈ°λ³Έκ°œλ…

jjyu_myΒ·2024λ…„ 11μ›” 18일

REACT

λͺ©λ‘ 보기
2/6
post-thumbnail

πŸ’‘ λ¦¬μ•‘νŠΈ κΈ°λ³Έ κ°œλ…

πŸ“Œ λ¦¬μ•‘νŠΈλž€?

  • λ¦¬μ•‘νŠΈ(React)λŠ” 페이슀뢁(ν˜„μž¬ Meta)μ—μ„œ κ°œλ°œν•œ JavaScript 라이브러리둜,
  • 주둜 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€(UI)λ₯Ό κ΅¬μ„±ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • λ¦¬μ•‘νŠΈμ˜ μ£Όμš” νŠΉμ§•μ€ μ»΄ν¬λ„ŒνŠΈ 기반 κ°œλ°œμž…λ‹ˆλ‹€.
  • UIλ₯Ό μ—¬λŸ¬ 개의 독립적인 μ»΄ν¬λ„ŒνŠΈλ‘œ λ‚˜λˆ„μ–΄ μž¬μ‚¬μš©μ„±μ„ 높이고 κ΄€λ¦¬ν•˜κΈ° μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€

πŸ“Œ μ»΄ν¬λ„ŒνŠΈ

  • μ»΄ν¬λ„ŒνŠΈλŠ” UI의 κΈ°λ³Έ λ‹¨μœ„μž…λ‹ˆλ‹€
  • λ¦¬μ•‘νŠΈμ—μ„œ UI μš”μ†ŒλŠ” λͺ¨λ‘ μ»΄ν¬λ„ŒνŠΈλ‘œ κ΅¬μ„±λ˜λ©°, 각 μ»΄ν¬λ„ŒνŠΈλŠ” ν•¨μˆ˜ν˜• λ˜λŠ” ν΄λž˜μŠ€ν˜•μœΌλ‘œ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ΅œμ‹  λ¦¬μ•‘νŠΈμ—μ„œλŠ” ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈκ°€ 주둜 μ‚¬μš©λ©λ‹ˆλ‹€.

πŸ“Œ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ

  • ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλŠ” JavaScript의 ν•¨μˆ˜λ‘œ μž‘μ„±λœ μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€
  • μ»΄ν¬λ„ŒνŠΈ 이름은 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•΄μ•Ό ν•˜λ©°, 파일 이름도 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€
    (예: MyComponent.js).

πŸ“Œ HTML 속성

  • λ¦¬μ•‘νŠΈμ—μ„œ HTML μ†μ„±μœΌλ‘œ classλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€ μ΄μœ λŠ” classκ°€ JavaScript의 μ˜ˆμ•½μ–΄μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€
  • λŒ€μ‹  className을 μ‚¬μš©ν•˜μ—¬ CSS 클래슀λ₯Ό μ§€μ • ν•©λ‹ˆλ‹€
<div className="my-class">Hello</div>

πŸ“Œ Return

  • λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈλŠ” 단 ν•˜λ‚˜μ˜ νƒœκ·Έ μš”μ†Œλ§Œ 리턴할 수 μžˆμŠ΅λ‹ˆλ‹€
  • μ—¬λŸ¬ 개의 μš”μ†Œλ₯Ό λ¦¬ν„΄ν•˜λ €λ©΄,ν•˜λ‚˜μ˜ λΆ€λͺ¨ μš”μ†Œλ‘œ 감싸야 ν•©λ‹ˆλ‹€
    -예λ₯Ό λ“€μ–΄, div λ‚˜ section λ“±μœΌλ‘œ κ°μ‹Έμ„œ λ°˜ν™˜ν•©λ‹ˆλ‹€
return (
  <div>
    <h1>Hello World</h1>
    <p>Welcome to React</p>
  </div>
);

πŸ“Œ 자기 λ‹«νž˜ νƒœκ·Έ

  • 자기 λ‹«νž˜ νƒœκ·ΈλŠ” λ‚΄μš©μ΄ 없을 경우 νƒœκ·Έκ°€ 슀슀둜 λ‹«νžˆλŠ” ν˜•νƒœμ΄λ©°, input / κ³Ό 같은 νƒœκ·ΈλŠ” 자체적으둜 λ‹«νž™λ‹ˆλ‹€
<input type="text" />

πŸ’‘ λ¦¬μ•‘νŠΈμ˜ ꡬ쑰

πŸ“Œ App.js

  • App.jsλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹œμž‘μ μ΄μž 메인 μ»΄ν¬λ„ŒνŠΈλ‘œ, λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈλ₯Ό importν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ λ Œλ”λ§ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€
  • App.js νŒŒμΌμ—μ„œλŠ” λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‘°ν•©ν•˜μ—¬ 전체 UIλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€

πŸ“Œ index.js

  • index.jsλŠ” λ¦¬μ•‘νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μž…κ΅¬μž…λ‹ˆλ‹€
  • index.jsμ—μ„œ React DOM을 μ‚¬μš©ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ μ»΄ν¬λ„ŒνŠΈλ₯Ό index.html의 νŠΉμ • DOM μš”μ†Œ (#root)에 λ Œλ”λ§ν•©λ‹ˆλ‹€
ReactDOM.render(<App />, document.getElementById('root'));

πŸ“Œ SPA (Single Page Application)

  • Single Page Application(SPA)은 ν•˜λ‚˜μ˜ HTML νŽ˜μ΄μ§€λ‘œ μ—¬λŸ¬ νŽ˜μ΄μ§€μ²˜λŸΌ λ™μž‘ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€
  • νŽ˜μ΄μ§€ 이동 없이, URL만 λ³€κ²½λ˜λ©° ν™”λ©΄λ§Œ κ°±μ‹ λ©λ‹ˆλ‹€

    μž₯점 : νŽ˜μ΄μ§€ κ°„ μ „ν™˜μ΄ λΉ λ₯΄κ³  μ„œλ²„μ™€μ˜ λΆˆν•„μš”ν•œ 톡신이 μ—†μŠ΅λ‹ˆλ‹€.
    단점 : 초기 λ‘œλ”© μ‹œκ°„μ΄ κΈΈ 수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ’‘ λΌμš°νŒ…κ³Ό λ„€νŠΈμ›Œν¬ 톡신

πŸ“Œ React Router

  • λ¦¬μ•‘νŠΈμ—μ„œλŠ” νŽ˜μ΄μ§€ 이동을 관리할 λ•Œ a νƒœκ·Έ λŒ€μ‹ μ— Link νƒœκ·Έλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
import { Link } from 'react-router-dom';
<Link to="/about">About</Link>
  • LinkλŠ” νŽ˜μ΄μ§€ κ°„μ˜ λ„€λΉ„κ²Œμ΄μ…˜μ„ μ²˜λ¦¬ν•˜λ©°, 전체 νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ λ‘œλ“œν•˜μ§€ μ•Šκ³ , ν•„μš”ν•œ λΆ€λΆ„λ§Œ κ°±μ‹ ν•©λ‹ˆλ‹€
  • a νƒœκ·Έμ™€ 달리 λ¦¬μ•‘νŠΈμ—μ„œ LinkλŠ” λ„€νŠΈμ›Œν¬ 톡신을 λ°œμƒμ‹œν‚€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€

πŸ“Œ λ„€νŠΈμ›Œν¬ 톡신

  • λ¦¬μ•‘νŠΈμ—μ„œλŠ” νŽ˜μ΄μ§€λ₯Ό 처음 λ‘œλ“œν•  λ•Œλ§Œ μ„œλ²„μ™€ 1번 톡신을 ν•˜κ³ , μ΄ν›„μ—λŠ” AJAXλ‚˜ Fetch API 등을 μ‚¬μš©ν•΄ λΉ„λ™κΈ°μ μœΌλ‘œ 데이터λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€
  • νŽ˜μ΄μ§€ λ‘œλ“œ ν›„μ—λŠ” μ„œλ²„μ™€μ˜ 톡신 없이 화면을 λ™μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€

πŸ”Ž a νƒœκ·Έμ™€ Link 차이

  • a νƒœκ·ΈλŠ” 클릭 μ‹œ μƒˆλ‘œμš΄ μš”μ²­μ΄ λ°œμƒν•˜κ³  νŽ˜μ΄μ§€κ°€ μƒˆλ‘œκ³ μΉ¨λ©λ‹ˆλ‹€
  • LinkλŠ” 클릭 μ‹œ μ„œλ²„μ™€μ˜ 톡신 없이 νŽ˜μ΄μ§€ λ‚΄μš©λ§Œ μ—…λ°μ΄νŠΈλ˜λ―€λ‘œ λΉ λ₯Έ νŽ˜μ΄μ§€ μ „ν™˜μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€

πŸ’‘ λΉŒλ“œ 및 배포

πŸ“Œ λΉŒλ“œ

  • 개발이 μ™„λ£Œλ˜λ©΄ yarn build λ˜λŠ” npm run build λͺ…λ Ήμ–΄λ₯Ό 톡해 μ΅œμ’… λΉŒλ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€
yarn build
  • λΉŒλ“œ 결과물은 build 폴더에 μƒμ„±λ˜λ©°, 이 폴더에 μžˆλŠ” νŒŒμΌλ“€μ€ 라이브 μ„œλ²„μ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•©λ‹ˆλ‹€
  • λΉŒλ“œ 폴더 μ•ˆμ— μžˆλŠ” 정적 νŒŒμΌλ“€μ€ 배포 κ°€λŠ₯ν•œ μ΅œμ’… νŒŒμΌμž…λ‹ˆλ‹€

profile

0개의 λŒ“κΈ€