Daily/Today I Learned

22.07.28_TIL

ν˜Έλ°€μ΄ 2022. 7. 28. 01:41

πŸ“Œ μ–΄μ œ 저녁에 각쒅 APIλ₯Ό μ‹€μŠ΅μ„ μ§„ν–‰ν–ˆλ‹€. 유튜브, 곡곡데이터 포털, vworld 등은 proxy 섀정없이 APIλ₯Ό λ°›μ•„μ˜¬ 수 μžˆμ—ˆμ§€λ§Œ 넀이버 검색 APIλ₯Ό κ°€μ Έμ˜¬ 경우 package.json에 proxy 섀정을 ν•΄μ•Ό CORS 였λ₯˜κ°€ 사라지며 데이터λ₯Ό λ°›μ•„μ˜¬ 수 μžˆμ—ˆλ‹€. 그리고 μ˜€λŠ˜μ€ Custom Hooksλ₯Ό ν•™μŠ΅ν•˜λŠ” 날이닀. λ°˜λ³΅λ˜λŠ” 룆ㄱ을 ν•¨μˆ˜λ‘œ λ§Œλ“€μ–΄ μž¬μ‚¬μš©ν•  수 μžˆλ‹€λΌκ³  μ ν˜€μžˆλŠ”λ° μ–΄λ–€ 것인지 μ •ν™•νžˆ ν•™μŠ΅μ„ μ§„ν–‰ν•΄λ³΄μž!!

πŸ“— 였늘 ν•™μŠ΅ν•œ λ‚΄μš©

Custom Hooks

  • κ°œλ°œμžκ°€ 슀슀둜 μ»€μŠ€ν…€ν•œ 훅을 μ˜λ―Έν•˜λ©° 이λ₯Ό μ΄μš©ν•΄ λ°˜λ³΅λ˜λŠ” λ‘œμ§μ„ ν•¨μˆ˜λ‘œ 뽑아내어 μž¬μ‚¬μš©ν•  수 μžˆλ‹€.
  • μ—¬λŸ¬ url을 fetchν•  λ•Œ, μ—¬λŸ¬ input에 μ˜ν•œ μƒνƒœ λ³€κ²½ λ“± λ°˜λ³΅λ˜λŠ” λ‘œμ§μ„ λ™μΌν•œ ν•¨μˆ˜μ—μ„œ μž‘λ™ν•˜κ²Œ ν•˜κ³  싢을 λ•Œ μ»€μŠ€ν…€ 훅을 주둜 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μƒνƒœκ΄€λ¦¬ 둜직의 μž¬ν™œμš© κ°€λŠ₯
  • 클래슀 μ»΄ν¬λ„ŒνŠΈλ³΄λ‹€ 적은 μ–‘μ˜ μ½”λ“œλ‘œ λ™μΌν•œ 둜직 κ΅¬ν˜„ κ°€λŠ₯
  • ν•¨μˆ˜ν˜•μœΌλ‘œ μž‘μ„±ν•˜κΈ° λ•Œλ¬Έμ— 보닀 λͺ…λ£Œν•˜λ‹€.

Custom Hook μ •μ˜ κ·œμΉ™

  • Custom Hook을 μ •μ˜ν•  λ•ŒλŠ” ν•¨μˆ˜ 이름 μ•žμ— useλ₯Ό λΆ™μ΄λŠ” 것이 κ·œμΉ™μ΄λ‹€.
  • λŒ€κ°œμ˜ 경우 ν”„λ‘œμ νŠΈ λ‚΄μ˜ hooks 디렉토리에 Custom Hook을 μœ„μΉ˜ μ‹œν‚¨λ‹€.
  • Custom Hook으둜 λ§Œλ“€ λ•Œ ν•¨μˆ˜λŠ” 쑰건뢀 ν•¨μˆ˜κ°€ μ•„λ‹ˆμ–΄μ•Ό ν•œλ‹€. return ν•˜λŠ” 값은 μ‘°κ±΄λΆ€μ—¬μ„œλŠ” μ•ˆλœλ‹€.

μ½”λ“œ λΆ„ν• (Code Spliting)

  • μ½”λ“œλ₯Ό ν•΄μ„ν•˜κ³  μ‹€ν–‰ν•˜λŠ” 정도가 λŠλ €μ‘ŒλŠ”μ§€ νŒŒμ•…ν•΄μ„œ λ²ˆλ“€μ„ λ‚˜λˆˆ 뒀에 μ§€κΈˆ ν•„μš”ν•œ μ½”λ“œλ§Œ 뢈러였고 λ‚˜μ€‘μ— ν•„μš”ν•œ μ½”λ“œλŠ” λ‚˜μ€‘μ— 뢈러올 수 μžˆλ„λ‘ν•˜λŠ” κ°œλ…μ΄λ‹€.
  • λ²ˆλ“€μ΄ κ±°λŒ€ν•΄μ§€λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•œ 쒋은 ν•΄κ²° 방법은 λ²ˆλ“€μ„ 물리적으둜 λ‚˜λˆ„λŠ” 것이닀.
  • λŸ°νƒ€μž„ μ‹œ μ—¬λŸ¬ λ²ˆλ“€μ„ λ™μ μœΌλ‘œ λ§Œλ“€κ³  λΆˆλŸ¬μ˜€λŠ” κ²ƒμœΌλ‘œ, Webpack, Rollupκ³Ό 같은 λ²ˆλ“€λŸ¬κ°€ μ§€μ›ν•˜λŠ” κΈ°λŠ₯이닀.
  • νŽ˜μ΄μ§€μ˜ λ‘œλ”© 속도λ₯Ό κ°œμ„ ν•  수 μžˆλ‹€.

λ²ˆλ“€ λΆ„ν•  μ€„μ΄λŠ”λ²•

  • 라이브러리λ₯Ό μ „μ²΄μ μœΌλ‘œ λΆˆλŸ¬μ™€μ„œ μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹Œ ν•„μš”ν•œ λ©”μ†Œλ“œλ§Œ λΆˆλŸ¬μ™€μ„œ μ‚¬μš©ν•˜μ—¬ 곡간을 확보할 수 μžˆλ‹€.
// lodash 라이브러리 전체 뢈러였기
import _ from 'lodash';

// lodash λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ λ©”μ†Œλ“œ ν•˜λ‚˜λ₯Ό λΆˆλŸ¬μ™€ μ‚¬μš©
import find from 'lodash/find';

Reactμ—μ„œμ˜ μ½”λ“œ λΆ„ν• 

  • SPAμ—μ„œλŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκΉŒμ§€ ν•œ λ²ˆμ— 뢈러였기 λ•Œλ¬Έμ— 첫 화면이 λ Œλ”λ§ λ λ•ŒκΉŒμ§€μ˜ μ‹œκ°„μ΄ μ˜€λž˜κ±Έλ¦¬λŠ” 것을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ½”λ“œ λΆ„ν•  κ°œλ…μ„ λ„μž…ν–ˆλ‹€.

Static Import

  • κΈ°μ‘΄ import ꡬ문은 λ¬Έμ„œμ˜ μƒμœ„μ— μœ„μΉ˜ν•΄μ•Ό ν•˜κ³ , 블둝문 μ•ˆμ—μ„œλŠ” μœ„μΉ˜ν•  수 μ—†λŠ” μ œμ•½ 사항이 μžˆμ—ˆλ‹€.

Dynamic Import

  • ꡬ문 뢄석 및 μ»΄νŒŒμΌν•΄μ•Ό ν•˜λŠ” 슀크립트의 양을 μ΅œμ†Œν™” μ‹œν‚€κΈ° μœ„ν•œ κ΅¬λ¬Έμž…λ‹ˆλ‹€.
  • ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ Import 문을 μ‚¬μš©ν•  수 μžˆλ‹€.
  • React.lazy와 ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆλ‹€.

React.lazy()

  • dynamic importλ₯Ό μ‚¬μš©ν•΄ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ Œλ”λ§ ν•  수 μžˆλ‹€.
  • 초기 λ Œλ”λ§ μ§€μ—°μ‹œκ°„μ„ μ–΄λŠμ •λ„ 쀄일 수 μžˆλ‹€.
  • React.lazy둜 감싼 μ»΄ν¬λ„ŒνŠΈλŠ” λ‹¨λ…μœΌλ‘œ 쓰일 수 μ—†κ³ , React.suspense μ»΄ν¬λ„ŒνŠΈμ˜ ν•˜μœ„μ—μ„œ λ Œλ”λ§ ν•΄μ•Όν•œλ‹€.
import Component from './Component';

const Component = React.lazy(() => import('./Component'));

React.Suspense

  • Router둜 λΆ„κΈ°κ°€ λ‚˜λˆ„μ–΄μ§„ μ»΄ν¬λ„ŒνŠΈλ“€μ€ lazyλ₯Ό 톡해 importν•˜λ©΄ ν•΄λ‹Ή path둜 μ΄λ™ν• λ•Œ μ»΄ν¬λ„ŒνŠΈλ₯Ό 뢈러였게 되며 λ‘œλ”©ν•˜λŠ” μ‹œκ°„μ΄ μƒκΈ°κ²Œ λœλ‹€.
  • 아직 λ Œλ”λ§μ΄ μ€€λΉ„λ˜μ§€ μ•Šμ€ μ»΄ν¬λ„ŒνŠΈκ°€ μžˆμ„ λ•Œ λ‘œλ”©ν™”λ©΄μ„ 보여주고, λ‘œλ”©μ΄ μ™„λ£Œλ˜λ©΄ λ Œλ”λ§μ΄ μ€€λΉ„λœ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ³΄μ—¬μ£ΌλŠ” κΈ°λŠ₯이닀.

React.lazy와 Suspense의 적용

  • 쀑간에 μ μš©μ‹œν‚€λŠ” κ²ƒλ³΄λ‹€λŠ” μ›Ή νŽ˜μ΄μ§€λ₯Ό 뢈러였고 μ§„μž…ν•˜λŠ” 단계인 Route에 이 두 κΈ°λŠ₯을 μ μš©μ‹œν‚€λŠ” 것이 μ’‹λ‹€.

πŸ“˜ μΆ”κ°€λ‘œ 곡뢀할 λ‚΄μš©

[udemy] React μ™„λ²½ κ°€μ΄λ“œ κ°•μ˜ 보기 (맀일 μ‘°κΈˆμ”© 이라도 κΎΈμ€€νžˆ λ“£κΈ°)

Study원과 ν•¨κ»˜ 진행쀑인 ν”„λ‘œμ νŠΈ κ΅¬ν˜„

  • Authentication

πŸ“ μ€‘μš”ν•œ λ‚΄μš©

  • Custom Hook
  • Custom Hook 생성쑰건
  • μ½”λ“œλΆ„ν• 
  • React.lazy
  • React.Suspense