๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

React

[React] ๋ผ์ดํ”„ ์‚ฌ์ดํด(Life Cycle )

๐Ÿง ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด๋ž€?

React๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅ์ผ€ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ view์˜ ๋ถ€๋ถ„ ๋ถ€๋ถ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ์ปดํฌ๋„ŒํŠธ์—๋Š” view์— ๋žœ๋”๋ง๋˜๊ธฐ ์ „ ์ค€๋น„ ๊ณผ์ •๋ถ€ํ„ฐ ์‚ฌ๋ผ์งˆ ๋•Œ๊นŒ์ง€์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ฐ€์ง„๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๋‹ค๋ฃจ๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” view๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

๋ผ์ดํ”„ ์‚ฌ์ดํด์€ ํฌ๊ฒŒ ๋งˆ์šดํŠธ, ์—…๋ฐ์ดํŠธ, ์–ธ๋งˆ์šดํŠธ ์„ธ๊ฐ€์ง€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

1. ๋งˆ์šดํŠธ

DOM์ด ์ƒ์„ฑ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋งˆ์šดํŠธ(mount)๋ผ๊ณ  ํ•œ๋‹ค.

2. ์—…๋ฐ์ดํŠธ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„ค๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•œ๋‹ค.

  • props์˜ ๋ณ€๊ฒฝ
  • state์˜ ๋ณ€๊ฒฝ
  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง
  • this.forceUpdate๋กœ ๊ฐ•์ œ ๋ Œ๋”๋ง ํŠธ๋ฆฌ๊ฑฐ

3. ์–ธ๋งˆ์šดํŠธ

์ปดํฌ๋„ŒํŠธ๋ฅผ DOM์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ์–ธ๋งˆ์šดํŠธ(unmount)๋ผ๊ณ  ํ•œ๋‹ค.

 

๐Ÿ“˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ

์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ด๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•จ์ˆ˜ํ˜•์—์„œ๋Š” useEffect๋“ฑ Hook์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.

 

๋ฆฌ์•กํŠธ์—์„œ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ์—๋Š” ์ด 9๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ ๋ฉ”์„œ๋“œ ๋ช…์— ๋”ฐ๋ผ ๋‘๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ๋‹ค.

  1. Will ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์€ ๋ฉ”์„œ๋“œ: ์–ด๋–ค ์ž‘์—…์„ ์ž‘๋™ํ•˜๊ธฐ ์ „์— ์‹คํ–‰
  2. Did ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์€ ๋ฉ”์„œ๋“œ: ์–ด๋–ค ์ž‘์—…์„ ์ž‘๋™ํ•œ ํ›„ ์‹คํ–‰
render() ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ์–‘์ƒˆ๋ฅผ ์ •์˜ํ•œ๋‹ค.  this.props, this.state์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฆฌ์•กํŠธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
constructor ๋ฉ”์„œ๋“œ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ๋กœ ์ฒ˜์Œ ์‹คํ–‰๋˜๊ณ  ์ดˆ๊ธฐ state๋ฅผ ์ •์˜ํ•œ๋‹ค.
getDerivedStateFromProps ๋ฉ”์„œ๋“œ props๋กœ ๋ฐ›์•„ ์˜จ ๊ฐ’์„ state์— ๋™๊ธฐํ™”์‹œํ‚ค๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
componentDidMount ๋ฉ”์„œ๋“œ ๋žœ๋”๋ง ์ดํ›„, ๋‚ด๋ถ€์—์„œ ํ•จ์ˆ˜ํ˜ธ์ถœ, ์ด๋ฒคํŠธ ๋“ฑ๋ก, ๋„คํŠธ์›Œํฌ ์š”์ฒญ ๋“ฑ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
shouldComponenetUpdate ๋ฉ”์„œ๋“œ props ๋˜๋Š” state๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ๋ฆฌ๋ Œ๋”๋ง์„ ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•œ๋‹ค. 
getSnapshotBeforeUpdate ๋ฉ”์„œ๋“œ ์—…๋ฐ์ดํŠธ ์ง์ „์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ถœ๋œ๋‹ค.
componentDidUpdate ๋ฉ”์„œ๋“œ ๋ฆฌ๋žœ๋”๋ง ์ดํ›„, DOM ๊ด€๋ จ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์ด์ „์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
componentWillUnmount ๋ฉ”์„œ๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ DOM์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
componentDidCatch ๋ฉ”์„œ๋“œ ์ปดํฌ๋„ŒํŠธ ๋žœ๋”๋ง ๋„์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜UI๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

๊ฐ ๋ฉ”์„œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์‹œ๊ธฐ ๋ฐ ๋‹จ๊ณ„๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ ๋  ๋•Œ(๋งˆ์šดํŠธ)

1. constructor : ํด๋ž˜์Šค ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ

2. getDerivedStateFromProps : props์— ์žˆ๋Š” ๊ฐ’์„ state์— ๋„ฃ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ

3. render : ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฉ”์„œ๋“œ

4.componentDidMount : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ € ์ƒ์— ๋‚˜ํƒ€๋‚œ ํ›„ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ DOM๊ด€๋ จ ์ž‘์—…, ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์ปดํฌ๋„ŒํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ (์—…๋ฐ์ดํŠธ)

1. getDerivedStateFromProps : ์ปดํฌ๋„ŒํŠธ์˜ props๋‚˜ state๊ฐ€ ๋ณ€๊ฒฝ๋์„ ๋•Œ๋„ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ

2. shouldComponentUpdate : ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ

3. render : ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฉ”์„œ๋“œ

4. getSnapshotBeforeUpdate : ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€ํ™”๋ฅผ DOM์— ๋ฐ˜์˜ํ•˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ด์ „๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

5. componentDidUpdate : ์ปดํฌ๋„ŒํŠธ์˜ ์—…๋ฐ์ดํŠธ ์ž‘์—…์ด ๋๋‚œ ๋’ค์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ

 

์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ฑฐ ํ•  ๋•Œ (์–ธ๋งˆ์šดํŠธ)

1. componentWillUnmount : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ๋ผ์ง€๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ์ฃผ๋กœ DOM์— ์ง์ ‘ ๋“ฑ๋กํ–ˆ๋˜ ์ด๋ฒคํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•œ๋‹ค.