๐Ÿ“Frontend/๐Ÿ““etc

[WIL] Life cycle, Hooks

Hoon2 2022. 8. 7. 17:22
728x90

Life cycle (์ƒ๋ช…์ฃผ๊ธฐ)

๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ View๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ์—๋Š” ๋ผ์ดํ”„์‚ฌ์ดํด ์ฆ‰, ์ปดํฌ๋„ŒํŠธ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์ˆ˜๋ช…์€ ๋ณดํ†ต ํŽ˜์ด์ง€์—์„œ ๋ Œ๋”๋ง๋˜๊ธฐ ์ „์ธ ์ค€๋น„ ๊ณผ์ •์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํŽ˜์ด์ง€์—์„œ ์‚ฌ๋ผ์งˆ ๋•Œ ๋์ด๋‚œ๋‹ค.

 

ํด๋ž˜์Šคํ˜•

  • Mounting : ์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ, DOM ์ƒ์— ์‚ฝ์ž…๋  ๋•Œ์— ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ
    • Constructor : ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์„ฑ์ž๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ๋˜๊ธฐ์ „์— ํ˜ธ์ถœ๋œ๋‹ค.
    • getDerivedStateFromProps: ์ตœ์ดˆ ๋งˆ์šดํŠธ ์‹œ์™€ ๊ฐฑ์‹  ์‹œ ๋ชจ๋‘์—๊ฒŒ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. 
    • render : ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„๋˜์•ผํ•  ์œ ์ผํ•œ ๋ฉ”์„œ๋“œ, ํ˜ธ์ถœ๋˜๋ฉด props,state ๊ฐ’์„ ํ™œ์šฉํ•˜์—ฌ null์„ ๋ฐ˜ํ™˜
  • Updating : ์ปดํฌ๋„ŒํŠธ๊ฐ€ re-rendering ๋  ๋•Œ, ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ ํ•˜๋Š” ๋ฉ”์„œ๋“œ
    • shouldComponentupdate : ์ปดํฌ๋„ŒํŠธ๊ฐ€ update๋˜๋Š” ์„ฑ๋Šฅ์„ ์ตœ์ ํ•˜ ์‹œํ‚ค๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ ๋ถ€๋ชจ,์ž์‹ ์ปดํฌ๋„ŒํŠธ ๋‹ค render ์‹คํ–‰
    • getSnapshotBeforeUpdate : ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๊ฐ€ ์‹ค์ œ DOM์— ๋ฐ˜์˜๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ, ๋‹ค์Œ์ˆœ์„œ ๋ฉ”์„œ๋“œ์ธ DidUpdate๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ํ›„์— ํ˜ธ์ถœ
    • componentDidUpdate : ์—…๋ฐ์ดํŠธ๊ฐ€ ์ผ์–ด๋‚œ ์งํ›„์— ํ˜ธ์ถœ, ์ตœ์ดˆ ๋ Œ๋”๋ง์—๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • Unmounting : ์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM ์ƒ์—์„œ ์ œ๊ฑฐ๋  ๋•Œ์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ
    • componentWillUnmount : ๋งˆ์šดํŠธ๊ฐ€ ํ—ค์ œ๋˜์–ด ์ œ๊ฑฐ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ, ์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์‹œ ๋ Œ๋ฉ์ด๋ง ๋˜์ง€ ์•Š๋Š”๋‹ค

ํ•จ์ˆ˜ํ˜•

  • useEffect : componentDidMount, componentDidUpdate ์ˆ˜ํ–‰ 
    • ์ปดํฌ๋„ŒํŠธ ์•ˆ์— state, props์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒซ๋ฒˆ์งธ ๋ Œ๋”๋ง๊ณผ ์ดํ›„ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค ๋˜ํ•œ, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ ์กฐ๊ฑด์„ ๊ฑธ๊ณ  ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์ด๋‚˜ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ • ๊ฐ€๋Šฅ
  • cleanup : ๋ชจ๋“  effect๋Š” ์ •๋ฆฌ๋ฅผ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ์ถ”๊ฐ€ ์ œ๊ฑฐ๊ฐ€ ํ•˜๋‚˜์˜ effect๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ 
  • ์„ฑ๋Šฅ ์ตœ์ ํ™” : ๋ชจ๋“  ๋ Œ๋”๋ง ์ดํ›„ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋•Œ effect๋ฅผ ๊ฑด๋” ๋›ฐ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ๋„˜๊ธฐ๋ฉด ๋œ๋‹ค.

 

๋ฆฌ์•กํŠธ ํ›…(hooks)

  1. useState : ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ ํ•  ์ˆ˜์žˆ๋‹ค
  2. useEffect : ๋ Œ๋”๋ง ์ดํ›„์— ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค.
  3. useContext : ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์™€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์ „์—ญ์ ์œผ๋กœ ์ •์˜ ํ•  ์ˆ˜์žˆ๋‹ค. 
  4. useReducer : state ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ reducer ํ•จ์ˆ˜์— ๋”ฐ๋กœ ๋ถ„๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  5. useRef : ์ปดํฌ๋„ŒํŠธ๋‚˜ html ์š”์†Œ๋ฅผ ๋ž˜ํผ๋Ÿฐ์Šค(ref)๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 
    • urrent ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์ด ์†์„ฑ์€ ๋‹ค์‹œ ๋žœ๋”๋ง์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. 
    • ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ : ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ง์ ‘์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ฌ๋•Œ, ํฌ์ปค์Šค, ํ…์ŠคํŠธ ์„ ํƒ์˜์—ญ, ๋ฏธ๋””์–ด ์žฌ์ƒ์„ ๊ด€๋ฆฌ ํ•  ๋•Œ
  6. forwardRef : useRef๋กœ ๋งŒ๋“  ๋ž˜ํผ๋Ÿฐ์Šค๋ฅผ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. 
  7. useImperativeHandle : useRef๋กœ ๋งŒ๋“  ๋ž˜ํผ๋Ÿฐ์Šค์˜ ์ƒํƒœ์— ๋”ฐ๋ผ, ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  8. useMemo, useCallback : ์˜์กด์„ฑ ๋ฐฐ์—ด์— ์ ํžŒ ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ๋งŒ ๊ฐ’, ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 
  9. useLayoutEffect : ๋ชจ๋“  DOM ๋ณ€๊ฒฝ ํ›„, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋žœ๋”ํ•˜๊ธฐ ์ „์— ์‹คํ–‰ ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  10. useDebugValue : ์‚ฌ์šฉ์ž ์ •์˜ Hook์˜ ๋””๋ฒ„๊น…์„ ๋„์™€์ค€๋‹ค. *๋””๋ฒ„๊น… : ์ฝ”๋“œ์—์„œ ๋ฒ„๊ทธ ์ œ๊ฑฐ
728x90