[Hook] useEffect

✨ 강은비·2022λ…„ 1μ›” 12일
1

React

λͺ©λ‘ 보기
10/36

react μŠ€ν„°λ””μ—μ„œ λ¦¬μ•‘νŠΈλ₯Ό λ‹€λ£¨λŠ” κΈ°μˆ μ΄λΌλŠ” 책을 μ„ μ •ν–ˆκ³  이 책을 읽고 배운 것을 λ°”νƒ•μœΌλ‘œ μž‘μ„±λ˜μ—ˆλ‹€.


πŸ“Œ useEffect

  • useEffectλ₯Ό 톡해 μ»΄ν¬λ„ŒνŠΈκ°€ Mount (초기 λ Œλ”λ§), Unmount (DOMμ—μ„œ 제거), Updateλ˜μ—ˆμ„ λ•Œμ˜ νŠΉμ • μž‘μ—…μ„ μ„€μ •ν•  수 μžˆλ‹€.

πŸ’‘ 인자

  • useEffectλŠ” 두 개의 인자λ₯Ό κ°–λŠ”λ‹€.
    • 첫번째 인자: ν•¨μˆ˜ -> ν•¨μˆ˜(cleanup ν•¨μˆ˜)λ₯Ό 리턴할 수 있음.
    • λ‘λ²ˆμ§Έ 인자: μ˜μ‘΄μ„± λ°°μ—΄(dependencies (deps))
    • 두 번째 인자λ₯Ό μ „λ‹¬λ°›μ•˜λ‹€λ©΄, deps λ°°μ—΄ μ•ˆμ— μžˆλŠ” 값듀이 λ³€ν•  λ•Œλ§Œ 첫 번째 인자둜 전달받은 ν•¨μˆ˜κ°€ μ‹€ν–‰λœλ‹€. (초기 λ Œλ”λ§μ΄ μ™„λ£Œλœ 후에도 싀행됨.)

πŸ’‘ 마운트된 μ΄ν›„μ—λ§Œ μ‹€ν–‰ν•˜κ³  싢을 λ•Œ

  • useEffectμ—μ„œ μ„€μ •ν•œ ν•¨μˆ˜λ₯Ό 처음 λ Œλ”λ§λœ μ΄ν›„μ—λ§Œ μ‹€ν–‰ν•˜κ³  싢을 λ•Œ 두 번째 인자(deps)둜 빈 λ°°μ—΄([])을 λ„£μ–΄μ£Όλ©΄ λœλ‹€.
    -> componentDidMount처럼 μ‹€ν–‰

πŸ’‘ νŠΉμ • 값이 μ—…λ°μ΄νŠΈλœ 이후에 μ‹€ν–‰ν•˜κ³  싢을 λ•Œ

  • κ·Έ νŠΉμ • 값을 두 번째 인자(deps)둜 λ°°μ—΄ ν˜•νƒœλ‘œ λ„£μ–΄μ£Όλ©΄ λœλ‹€.
    -> componentDidUpdate처럼 μ‹€ν–‰ (초기 λ Œλ”λ§λ  λ•Œλ„ 싀행됨.)

πŸ’‘ cleanup ν•¨μˆ˜

  • useEffectμ—μ„œ ν•¨μˆ˜λ₯Ό 리턴할 수 μžˆλŠ”λ° λ°˜ν™˜λœ ν•¨μˆ˜λ₯Ό cleanup ν•¨μˆ˜λΌκ³  ν•œλ‹€.
  • μ»΄ν¬λ„ŒνŠΈκ°€ Unmout되기 μ§μ „μ΄λ‚˜ Update되기 직전에 μˆ˜ν–‰ν•  μž‘μ—…μ„ μ„€μ •ν•  수 μžˆλ‹€.
  • deps μΈμžμ— 빈 배열을 μ „λ‹¬ν•˜λ©΄ cleanup ν•¨μˆ˜λŠ” μ»΄ν¬λ„ŒνŠΈκ°€ Unmount되기 직전에 μ‹€ν–‰λœλ‹€.
  • deps 배열에 값이 μžˆλ‹€λ©΄ λ°°μ—΄ μ•ˆμ— μžˆλŠ” 값이 μ—…λ°μ΄νŠΈλ˜κΈ° 직전에도 ν˜ΈμΆœλœλ‹€.


πŸ’œ μš”μ•½

  • deps에 [] (빈 λ°°μ—΄)을 넣을 λ•Œ, life cycle method쀑 componentDidmount처럼 μ‹€ν–‰
  • deps에 넣은 νŒŒλΌλ―Έν„° 값이 μ—…λ°μ΄νŠΈ λ˜μ—ˆμ„ λ•Œ, componentDidUpdate처럼 μ‹€ν–‰. (초기 λ Œλ”λ§λ  λ•Œλ„ 첫번째 인자의 ν•¨μˆ˜κ°€ 싀행됨.)
  • useEffectμ—μ„œ λ°˜ν™˜λœ ν•¨μˆ˜λŠ” clean up ν•¨μˆ˜λ‘œ, componentWillUnmount처럼 μ‹€ν–‰ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈ 직전에 ν˜ΈμΆœλœλ‹€.
  • deps μΈμžκ°€ μƒλž΅λ˜μ—ˆλ‹€λ©΄, λ Œλ”λ§λ  λ•Œλ§ˆλ‹€ 첫번째 인자둜 받은 ν•¨μˆ˜μ™€ cleanup ν•¨μˆ˜κ°€ 호좜됨.

0개의 λŒ“κΈ€