TIL/🧺 React

μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœ 관리λ₯Ό μœ„ν•œ "React Hooks"

devussy 2023. 1. 6. 00:44

Hooks λ“±μž₯ν•˜κΈ° μ „

μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœ 관리λ₯Ό ν•˜λ €λ©΄ 클래슀 기반 λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈλ₯Ό μž‘μ„±ν•΄μ•Ό ν–ˆλ‹€.

this.state ν•„λ“œμ— 이름을 μ €μž₯ν•œλ‹€λ©΄, μ‚¬μš©μžκ°€ 이 값을 λ³€κ²½ν•  λ•Œλ§ˆλ‹€ 이 값이 κ°±μ‹ λ˜κ³  λ‹€μ‹œ 화면에 λ°˜μ˜ν•˜λŠ” Class 기반 μ»΄ν¬λ„ŒνŠΈ λ°©μ‹μ΄μ˜€λ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ 기반 μ»΄ν¬λ„ŒνŠΈλ₯Ό μž‘μ„±ν•˜μ—¬ μœ μ§€ 보수λ₯Ό μ‰½κ²Œ ν•˜λ„λ‘ Hooksλ₯Ό λ§Œλ“€μ—ˆλ‹€.

 

 

 

Hooksλž€ ?


λ¦¬μ•‘νŠΈ v16.8 에 μƒˆλ‘œ λ„μž…λœ κΈ°λŠ₯으둜, ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ state와 생λͺ…μ£ΌκΈ° κΈ°λŠ₯을 연동할 수 있게 ν•΄μ£ΌλŠ” ν•¨μˆ˜

μ‰½κ²Œ 말해, ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœ κ°’ 및 λ‹€λ₯Έ μ—¬λŸ¬ κΈ°λŠ₯을 μ‚¬μš©ν•˜κΈ° νŽΈλ¦¬ν•˜κ²Œ ν•΄μ£ΌλŠ” λ©”μ†Œλ“œμ΄λ‹€.

 

κΈ°μ‘΄ 라이프 사이클 λ©”μ†Œλ“œ 기반이 μ•„λ‹Œ 둜직 기반으둜 λ‚˜λˆŒ 수 있기 λ•Œλ¬Έμ—, μ»΄ν¬λ„ŒνŠΈλ₯Ό ν•¨μˆ˜ λ‹¨μœ„λ‘œ 잘게 λ‚˜λˆŒ 수 μžˆλ‹€.

 

ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ state을 κ°€μ§ˆ 수 있게 λ˜μ—ˆλ‹€.

 

만일 앱을 react hook을 μ‚¬μš©ν•˜μ—¬ λ§Œλ“ λ‹€λ©΄ class component, render 등을 μ•ˆν•΄λ„ λœλ‹€λŠ” λœ»μ΄λ‹€.

  • class μ•ˆμ—μ„œ λ™μž‘ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ class 없이 λ¦¬μ•‘νŠΈλ₯Ό μ‚¬μš©ν•  수 있게 ν•œλ‹€.

→ λͺ¨λ“  것은 ν•˜λ‚˜μ˜ function이 λ˜λŠ” 것, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄ κ°€λŠ₯ν•΄μ§€λŠ” 것

 

 

κΈ°λŠ₯

  • ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ μƒνƒœ 관리λ₯Ό ν•  수 μžˆλŠ” useState
  • λ Œλ”λ§ 직후 μž‘μ—…μ„ μ„€μ •ν•˜λŠ” useEffect λ“±

→ 기쑴의 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν•  수 μ—†μ—ˆλ˜ λ‹€μ–‘ν•œ μž‘μ—…μ„ ν•  수 있게 ν•΄μ€€λ‹€.

 

 

μ£Όμ˜μ‚¬ν•­

  • Hook μ‚¬μš© μ‹œμ— μ΅œμƒμœ„(반볡문, 쑰건문, μ€‘μ²©λœ ν•¨μˆ˜ x)μ—μ„œ 그리고 μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜κ°€ μ•„λ‹Œ λ¦¬μ•‘νŠΈ ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œλ§Œ Hook을 ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§λ  λ•Œλ§ˆλ‹€ 항상 λ™μΌν•œ μˆœμ„œλ‘œ Hook이 호좜되게 λœλ‹€.

 

 

 

 

useState


ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ 가변적인 μƒνƒœλ₯Ό μ§€λ‹ˆκ³  μžˆμ„ 수 있게 ν•΄μ£ΌλŠ” κ°€μž₯ 기본적인 Hook

  • stateλ₯Ό ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈ μ•ˆμ—μ„œ μ‚¬μš©ν•  수 있게 ν•œλ‹€.
  • ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœλ₯Ό 관리해야 λ˜λŠ” 일이 λ°œμƒν•  λ•Œ μ‚¬μš©
  • μ—¬λŸ¬λ²ˆ μ‚¬μš©ν•˜κΈ°
    • ν•˜λ‚˜μ˜ useState ν•¨μˆ˜λŠ” ν•˜λ‚˜μ˜ μƒνƒœκ°’λ§Œ 관리할 수 μžˆμœΌλ―€λ‘œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 관리해야 ν•  μƒνƒœκ°€ μ—¬λŸ¬κ°œμΈ κ²½μš°μ—λ„ μ—¬λŸ¬λ²ˆ μ‚¬μš©ν•˜λ©΄ λœλ‹€.

 

 

 

 

useEffect


λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈκ°€ λ Œλ”λ§ 될 λ•Œλ§ˆλ‹€ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€μ • ν•  수 μžˆλŠ” Hook

ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ componentDidMount 와 componentDidUpdate λ₯Ό ν•©μΉœ ν˜•νƒœλ‘œ 보아도 λ¬΄λ°©ν•˜λ‹€.

  • 마운트 될 λ•Œλ§Œ μ‹€ν–‰ν•˜κ³  싢을 λ•Œ
  • νŠΉμ • 값이 μ—…λ°μ΄νŠΈ 될 λ•Œλ§Œ μ‹€ν–‰ν•˜κ³  싢을 λ•Œ
  • μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈλ˜κΈ° μ „μ΄λ‚˜, μ—…λ°μ΄νŠΈ 되기 직전에 μ–΄λ– ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μ‹Άλ‹€λ©΄ useEffect μ—μ„œ 뒷정리(cleanup) ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€

 

 

 

useReducer


useState 보닀 μ»΄ν¬λ„ŒνŠΈμ—μ„œ 더 λ‹€μ–‘ν•œ 상황에 따라 λ‹€μ–‘ν•œ μƒνƒœλ₯Ό λ‹€λ₯Έ κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈν•΄μ£Όκ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” Hook

Reducer

  • ν˜„μž¬ μƒνƒœμ™€, μ—…λ°μ΄νŠΈλ₯Ό μœ„ν•΄ ν•„μš”ν•œ 정보λ₯Ό 담은 μ•‘μ…˜(action) 값을 전달 λ°›μ•„ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
  • λ¦¬λ“€μ„œ ν•¨μˆ˜μ—μ„œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€ λ•ŒλŠ” κΌ­ λΆˆλ³€μ„±μ„ μ§€μΌœμ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

 

 

useMemo


νŠΉμ • κ°’ μž¬μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•˜λŠ” Hook (= 리턴값 μž¬μ‚¬μš©)

  • ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ λ°œμƒν•˜λŠ” 연산을 μ΅œμ ν™” ν•  수 있게 ν•œλ‹€.
    • ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ: λ Œλ”λ§ 될 λ•Œλ§ˆλ‹€ ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈκ°€ ν˜ΈμΆœλœλ‹€λŠ” 뜻
    • 즉, ν•¨μˆ˜κ°€ 호좜되면 λͺ¨λ“  λ‚΄λΆ€ λ³€μˆ˜κ°€ μ΄ˆκΈ°ν™”λœλ‹€
      • μ»΄ν¬λ„ŒνŠΈ 내뢀에 μ—¬λŸ¬ 개의 ν•¨μˆ˜κ°€ μžˆμ„ 경우, ν•˜λ‚˜μ˜ κ°’λ§Œ λ°”λ€Œμ–΄λ„ λͺ¨λ“  ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜μ–΄ λΆˆν•„μš”ν•œ 연산이 λ‹€μ‹œ 이루어짐
  • λ³΅μž‘ν•œ μ—°μ‚°μ˜ 쀑볡을 ν”Όν•˜κ³  Reactμ•±μ˜ μ„±λŠ₯을 μ΅œμ ν™”ν•œλ‹€.

 

 

 

useCallback


νŠΉμ • ν•¨μˆ˜λ₯Ό μƒˆλ‘œ λ§Œλ“€μ§€ μ•Šκ³  μž¬μ‚¬μš©ν•˜κ³  μ‹Άμ„λ•Œ μ‚¬μš©ν•˜λŠ” Hook (= ν•¨μˆ˜ μž¬μ‚¬μš©)

  • 주둜 λ Œλ”λ§ μ„±λŠ₯을 μ΅œμ ν™”ν•΄μ•Ό ν•˜λŠ” μƒν™©μ—μ„œ μ‚¬μš©ν•œλ‹€.
  • 이벀트 ν•Έλ“€λŸ¬ ν•¨μˆ˜λ₯Ό ν•„μš”ν•  λ•Œλ§Œ 생성 ν•  수 μžˆλ‹€.

 

 

 

useContext


ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ Context λ₯Ό 보닀 더 μ‰½κ²Œ μ‚¬μš©ν•˜κ²Œ ν•΄μ€€λ‹€.

 

 

 

useRef


ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ ref λ₯Ό μ‰½κ²Œ μ‚¬μš© ν•  수 있게 ν•΄μ€€λ‹€.

 

 

 

 

 

μ°Έκ³ λ¬Έν—Œ