WEB/REACT

[React] useEffect

mingzoo 2021. 7. 6. 01:10

useEffect๋ฅผ ์ข€ ๋” ์ง‘์ค‘์ ์œผ๋กœ ๋‹ค๋ค„๋ณผ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค. ์ด๋Š” ๋ผ์ดํ”„์‚ฌ์ดํด๊ณผ ์ง๊ฒฐ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ •ํ™•ํžˆ ์•Œ๊ณ  ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด์„œ ๋‹ค์‹œ ๋ฆฌ๋‹ค๊ธฐ ์ฑ…์„ ์˜ค๋žœ๋งŒ์— ํŽด์„œ ์‚ดํŽด๋ณด์•˜๋‹ค.


UseEffect

useEffect๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ›…์ด๋‹ค.

componentDidMount + componentDidUpdate

componentDidMount + componentDidUpdate + componentWillUnmount

 

๋งˆ์šดํŠธ ๋  ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ (ComponentDidMount)

useEffect(() => {
	console.log('๋งˆ์šดํŠธ๋ ๋•Œ๋งŒ');
},[]);

์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋งจ ์ฒ˜์Œ ๋ Œ๋”๋ง ๋์„ ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๋‘๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋นˆ ๋ฐฐ์—ด์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.


๋ณดํ†ต ๋งˆ์šดํŠธ ์‹œ์— ์ ์šฉํ•˜๋Š” ์ž‘์—…

  • props ๋กœ ๋ฐ›์€ ๊ฐ’์„ ์ปดํฌ๋„ŒํŠธ์˜ ๋กœ์ปฌ ์ƒํƒœ๋กœ ์„ค์ •
  • ์™ธ๋ถ€ API ์š”์ฒญ (REST API ๋“ฑ)
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ (D3, Video.js ๋“ฑ...)
  • setInterval ์„ ํ†ตํ•œ ๋ฐ˜๋ณต์ž‘์—… ํ˜น์€ setTimeout ์„ ํ†ตํ•œ ์ž‘์—… ์˜ˆ์•ฝ

 

ํŠน์ • ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋  ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ (ComponentDidUpdate)

useEffect(() => {
	console.log('์—…๋ฐ์ดํŠธ๋ ๋•Œ');
},[update]);

useEffect์˜ ๋‘๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐฐ์—ด ์•ˆ์— ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค ๊ฒ€์‚ฌํ•˜๊ณ  ์‹ถ์€ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์–ธ๋งˆ์šดํŠธ ๋  ๋•Œ(componentWillUnmount)

useEffect(() => {
    console.log('์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚จ');
    return () => {
      console.log('์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง');
    };
 }, []);

 

unmount ๋  ๋•Œ๋งŒ ๋’ท์ •๋ฆฌ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ ์‹ถ์œผ๋ฉด useEffect์˜ ๋‘๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋นˆ ๋ฐฐ์—ด์„ ๋„ฃ์œผ๋ฉด๋œ๋‹ค.

๋’ท์ •๋ฆฌํ•จ์ˆ˜(cleanup)

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ -> ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚จ

์‚ฌ๋ผ์งˆ๋•Œ -> ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง

 

๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ๋’ท์ •๋ฆฌ ํ•จ์ˆ˜๊ฐ€ ๊ณ„์† ๋‚˜ํƒ€๋‚œ๋‹ค.

๋’ท์ •๋ฆฌํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋Š” ์—…๋ฐ์ดํŠธ๋˜๊ธฐ ์ง์ „์˜ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.

 

์–ธ๋งˆ์šดํŠธ์‹œ์— ์ ์šฉํ•˜๋Š” ์ž‘์—…

  • setInterval, setTimeout ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋“ฑ๋กํ•œ ์ž‘์—…๋“ค clear ํ•˜๊ธฐ (clearInterval, clearTimeout)
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธ์Šคํ„ด์Šค ์ œ๊ฑฐ
728x90