Jieunny์˜ ๋ธ”๋กœ๊ทธ

[React] ๋ฆฌ์•กํŠธ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ณธ๋ฌธ

Study/React

[React] ๋ฆฌ์•กํŠธ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด

Jieunny 2023. 8. 22. 16:32

๐Ÿ’ก ๋ฆฌ์•กํŠธ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด

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

โžฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒ์„ฑ(Mounting) -> ์—…๋ฐ์ดํŠธ(Updating) -> ์ œ๊ฑฐ(Unmounting) ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

โžฐ ๋ฆฌ์•กํŠธ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ์•กํŠธ ํ›…์ธ useEffect๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿ’ก ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด ๋ฉ”์„œ๋“œ

1. ๋งˆ์šดํŠธ

โžฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์„ ์˜๋ฏธํ•œ๋‹ค.
โžฐ constructor -> getDerivedStateFromProps -> render -> componentDidMount ์ˆœ์„œ๋กœ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
constructor()

์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ
getDerivedStateFromProps()

props๋กœ ๋ฐ›์•„์˜จ ๊ฒƒ์„ state๋กœ ๋„ฃ์–ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ๋ Œ๋”๋ง ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜๋ฉฐ ๋ฆฌ๋ Œ๋”๋ง ๋˜๊ธฐ ์ „์—๋„ ํ•ญ์ƒ ์‹คํ–‰๋œ๋‹ค. Props๋‚˜ State๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ๋„ ํ˜ธ์ถœ๋œ๋‹ค.
render()

์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฉ”์„œ๋“œ
componentDidMount()

์ปดํฌ๋„ŒํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๋ Œ๋”๋ง์ด ๋๋‚˜๊ณ  ๋‚˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋กœ, ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์—์„  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ์ถœ๋ ฅ๋œ ์ƒํƒœ์ด๋‹ค.

 

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

โžฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‹œ์ ์„ ์˜๋ฏธํ•œ๋‹ค.

โžฐ  getDerivedStateFromProps -> shouldComponentUpdate -> render -> getSnapshotBeforeUpdate -> componentDidUpdate ์ˆœ์„œ๋กœ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
shouldComponentUpdate()

์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ React.memo์™€ ์œ ์‚ฌํ•˜๋‹ค.
getSnapshotBeforeUpdate()

render์—์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒฐ๊ณผ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์‹ค์ œ ๋ฐ˜์˜๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ.

์ปดํฌ๋„ŒํŠธ์— ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ ์ง์ „์˜ DOM ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์™€์„œ ํŠน์ • ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ๊ทธ ๋‹ค์Œ ๋ฐœ์ƒํ•˜๋Š” componentDidUpdate์—์„œ ๋ฐ›์•„์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
componentDidUpdate()

๋ฆฌ๋ Œ๋”๋ง ๋งˆ์น˜๊ณ , ํ™”๋ฉด์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ณ€ํ™”๊ฐ€ ๋ชจ๋‘ ๋ฐ˜์˜๋˜๊ณ  ๋‚œ ๋’ค์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ, ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ๋ณ€ํ• ๋•Œ๋งŒ useEffect๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

 

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

โžฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๋Š” ์‹œ์ ์„ ์˜๋ฏธํ•œ๋‹ค.

โžฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๊ธฐ ์ง์ „์— componentWillUnmout ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

componentWillUnmount()

์ฃผ๋กœ DOM์— ์ง์ ‘ ๋“ฑ๋กํ–ˆ๋˜ ์ด๋ฒคํŠธ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

 

๐Ÿ’ก ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด

โžฐ useEffect๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

โžฐ ํ™”๋ฉด์— ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋œ ํ›„์— ์ˆ˜ํ–‰๋˜๋ฉฐ componentDidMount, componentDidUpdate, componentWillUnmout๊ฐ€ ํ•ฉ์ณ์ง„ ๊ฒƒ

// 1. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋  ๋•Œ ๋งˆ๋‹ค ์‹คํ–‰๋จ.
useEffect(() => {
}) 

// 2. componentDidMount()
// ๋ Œ๋”๋ง์ด ์™„๋ฃŒ๋œ ํ›„ ํ˜ธ์ถœ๋จ => ๋งˆ์šดํŠธ ์ดํ›„ 1ํšŒ๋งŒ ์‹คํ–‰
useEffect(() => {
}, [])

// 3. componentDidUpdate() & getDerivedStateFromProps()
// ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰๋จ => 2๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐฐ์—ด์— ์ ์–ด์ค€ ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ์‹คํ–‰
useEffect(() => {
}, [props, state, ...]}

// 4. componentWillUnmount()
// ์–ธ๋งˆ์šดํŠธ ๊ด€๋ จ ์ฝ”๋“œ๋Š” return ์ฝœ๋ฐฑ์— ์ž‘์„ฑ
useEffect(() => {
    return () => {
   	    // unmount ์ฝ”๋“œ
    }
}, [props, state, ...])

 

'Study > React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] ๋ฆฌ๋•์Šค๋ž€ ๋ฌด์—‡์ผ๊นŒ?  (2) 2023.08.24