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

๋ฆฌ์•กํŠธ๋ฅผ ์ข€ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์•„์„œ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

์šฐ์„  ์ด ์ƒ๋ช…์ฃผ๊ธฐ๋ผ๋Š”๊ฒŒ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜์„œ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์‚ฌ๋ผ์งˆ ๋•Œ๊นŒ์ง€์˜ ์ฃผ๊ธฐ๋ฅผ ๋งํ•œ๋‹ค.

์ด ์ฃผ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋“ค ์„ธ ๊ฐ€์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋“ค์„ useEffect ํ›…๊ณผ ๋น„๊ตํ•ด์„œ ์‚ดํŽด๋ณด๋ ค ํ•œ๋‹ค.

  • componentDidMount()
  • componentDidUpdate()
  • componentWillUnmount()

 

mount ?? 

๋จผ์ € ๋งˆ์šดํŠธ(mount)๋ผ๋Š” ์šฉ์–ด๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ์•„์•ผ๊ฒ ๋‹ค.

๋งˆ์šดํŠธ์™€ ์–ธ๋งˆ์šดํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋งˆ์šดํŠธ๋Š” ์‚ฌ์ „์ ์ธ ์˜๋ฏธ๋กœ๋Š” '์‹œ์ž‘ํ•˜๋‹ค'๋ผ๋Š” ๋œป์ด์ง€๋งŒ-
๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ ๋งˆ์šดํŠธ๋Š” DOM ํŠธ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์›น๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚  ๋•Œ๋ฅผ ๋งํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ ์ด๋ ‡๊ฒŒ ๋งํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

  • ๋งˆ์šดํŠธ(mount) : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ตœ์ดˆ๋กœ ๋ Œ๋” ๋  ๋•Œ์˜ ๊ณผ์ •
  • ์–ธ๋งˆ์šดํŠธ(unmount) : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ญ์ œ๋  ๋•Œ์˜ ๊ณผ์ •

 

 

componentDidMount()

์ด ๋ฉ”์„œ๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ‰๊ฐ€๋˜๊ณ  DOM์— ๋ Œ๋”๋ง ๋  ๋•Œ, ์ฆ‰ ๋งˆ์šดํŠธ ๋œ ์งํ›„์— ํ˜ธ์ถœ๋œ๋‹ค.

useEffect(() => {
    setFilteredUsers(DUMMY_USERS.filter((user) => user.name.includes(searchTerm)));
}, []);

ํ›…๊ณผ ๋น„๊ตํ•˜์ž๋ฉด, ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š” useEffect ํ›…๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ชจ๋“  effect ํ•จ์ˆ˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ๋ Œ๋”๋ง ๋˜๋Š” - ๋งˆ์šดํŠธ ๋  ๋•Œ ์‹คํ–‰๋˜๊ณ , ์˜์กด์„ฑ ๋ฐฐ์—ด์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋ฉด ์ฒ˜์Œ ์‹คํ–‰๋œ ์ดํ›„๋กœ ๋‹ค์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ!

 

 

componentDidUpdate()

์ด ๋ฉ”์„œ๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐฑ์‹ ๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค.
์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žฌํ‰๊ฐ€๋˜๋ฉฐ ๋ Œ๋”๋ง์ด ๋‹ค์‹œ ์ผ์–ด๋‚  ๋•Œ๋ฅผ ๋งํ•œ๋‹ค.

useEffect ํ›…์˜ ์˜์กด์„ฑ ๋ฐฐ์—ด์— ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, ์ด ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค useEffect ํ•จ์ˆ˜๋„ ๋‹ค์‹œ ์žฌ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.
์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žฌํ‰๊ฐ€ ๋˜๊ฑฐ๋‚˜ ๋ฆฌ๋ Œ๋”๋ง ๋  ๋•Œ ์˜์กด์„ฑ ๋ฐฐ์—ด๋„ ์žฌํ‰๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ!

useEffect(() => {
    setFilteredUsers(DUMMY_USERS.filter((user) => user.name.includes(searchTerm)));
}, [searchTerm]);

searchTerm์ด๋ผ๋Š” ๊ฐ’์— ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค ์žฌ์‹คํ–‰๋œ๋‹ค.

 

 

componentWillUnmount()

์ด ๋ฉ”์„œ๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์—์„œ ์‚ญ์ œ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋œ๋‹ค.
useEffect ํ›…์˜ ํด๋ฆฐ์—… ํ•จ์ˆ˜์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.
ํด๋ฆฐ์—… ํ•จ์ˆ˜๋Š” useEffect ํ›… ์•ˆ์— return ๊ฐ’์ด ์ •์˜๋œ ํ•จ์ˆ˜๋กœ, useEffect๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๊ณ , ์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์—์„œ ์‚ญ์ œ๋˜๊ธฐ ์ „์— ๋‹ค์‹œ ํ˜ธ์ถœ๋œ๋‹ค.

useEffect( return ()=> {
        console.log('User will unmount');
    }
}, []);

 

 

 

์ฐธ๊ณ 

 

 

 

 


๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ๐Ÿคธ‍โ™€๏ธ

๋ฐฉ๋ฌธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ™Œ

ํฌ์ŠคํŒ…๋“ค์€ ๊ณต๋ถ€์ค‘์ธ ๋‚ด์šฉ์„ ๊ธ€๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ์ด๋ผ ๋ถ€์กฑํ•œ ์ ์ด ๋งŽ์œผ๋‹ˆ ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. 

๋ถ€์กฑํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ฝ”๋ฉ˜ํŠธ๋Š” ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š”, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ™‚

728x90