React

[React] useEffect

Alchemists 2022. 8. 9. 13:39
728x90

Life Cycle

 

์ปดํฌ๋„ŒํŠธ์—๋Š” LifeCycle์ด ์žˆ๋‹ค.

 

ํŽ˜์ด์ง€์— ์žฅ์ฐฉ๋˜๋Š” mount

๊ฐ€๋” ์—…๋ฐ์ดํŠธ ๋˜๋Š” update

์“ธ๋ชจ ์—†์–ด์ง€๋ฉด ์ œ๊ฑฐ๋˜๋Š” unmount

 

๊ทผ๋ฐ ์ด Life Cycle์„ ์™œ ๋ฐฐ์šธ๊นŒ? 

cycle ์ค‘๊ฐ„์ค‘๊ฐ„์— ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋•Œ ํ”ํžˆ ๊ฐˆ๊ณ ๋ฆฌ๋ฅผ ๋‹ฌ์•„์„œ ๊ฐ„์„ญ์„ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด mountํ• ๋•Œ ๊ฐˆ๊ณ ๋ฆฌ๋ฅผ ๋‹ฌ๋ฉด mount ๋ ๋•Œ ์ฝ”๋“œ๊ฐ€ ๊ฐ™์ด ์‹คํ–‰๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ปดํฌ๋„ŒํŠธ์— ๋‹ค๋Š” ๊ฐˆ๊ณ ๋ฆฌ๋ฅผ useEffect๋ผ๊ณ  ํ•œ๋‹ค. 

 

useEffect

useEffect๋Š” mount,update ์‹œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค.

 

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

 

๐ŸŒŠ useEffect ์•ˆ์— ์ ๋Š” ์ฝ”๋“œ๋“ค

 

์–ด๋ ค์šด ์—ฐ์‚ฐ, ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…, ํƒ€์ด๋จธ ์žฅ์ฐฉ 

 

๐Ÿ‹ js์—์„œ ํƒ€์ด๋จธ ์“ฐ๋Š” ๋ฒ•

 

๐Ÿ‹ ํ•ด๋ณด๊ธฐ : useEffect์™€ setTimeout์„ ์‚ฌ์šฉํ•˜์—ฌ 2์ดˆ๊ฐ€ ์ง€๋‚˜๋ฉด divํƒœ๊ทธ๊ฐ€ ์‚ฌ๋ผ์ง€๊ฒŒ ํ•ด๋ณด์ž!

 

์ด div ํƒœ๊ทธ๊ฐ€ 2์ดˆ ์ง€๋‚˜๋ฉด ์‚ญ์ œ ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

setTimeoutํ•จ์ˆ˜๋Š” 2์ดˆ๊ฐ€ ์ง€๋‚˜๋ฉด alert๋ณ€์ˆ˜๋ฅผ false๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. alert๊ฐ€ false๋ฉด div์ž๋ฆฌ๊ฐ€ null์ด ๋œ๋‹ค.

 

์–ด๋ž ๊ทผ๋ฐ useEffect ๋์— [ ] ์˜ ์ •์ฒด๋Š” ๋ญ˜๊นŒ?

 

useEffect์— ์‹คํ–‰์กฐ๊ฑด ๋‹ฌ์•„์ฃผ๊ธฐ 

 

์‹คํ–‰์กฐ๊ฑด์„ ์ „๋ฌธ์šฉ์–ด๋กœ dependency๋ผ๊ณ  ํ•œ๋‹ค. [ ]๊ฐ€ ์—†๋‹ค๋ฉด mount,update์‹œ์— ์‹คํ–‰๋˜์ง€๋งŒ 

[ ] ๋งŒ ์žˆ์œผ๋ฉด mount ๋ ๋•Œ๋งŒ ์‹คํ–‰๋œ๋‹ค. ์ตœ์ดˆ 1ํšŒ๋งŒ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

๊ทผ๋ฐ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— alert๋ผ๊ณ  dependency๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด alert๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋œ๋‹ค!

 

 

 

 

clean up function

 

์ด์ œ useEffect์— return์„ ์ถ”๊ฐ€ํ•ด๋ณด๊ฒ ๋‹ค. 

 

return์€ useEffect ๋™์ž‘ ์ „์— ์‹คํ–‰๋œ๋‹ค. ๋ฆฌํ„ด์„ clean up function์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๋ฆฌ์•กํŠธ ํŠน์„ฑ์ƒ ์žฌ ๋ Œ๋”๋ง์ด ๋งŽ๋‹ค.๊ทธ๋ž˜์„œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์น˜์›Œ์ค˜์•ผ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ธฐ์กด์ฝ”๋“œ๋ฅผ ์น˜์šฐ๋Š” ๊ฑธ return ์•ˆ์— ์จ์„œ clean up ํ•œ๋‹ค.

 

clean up function ์•ˆ์— ์“ฐ๋Š” ๊ฒƒ์€ ํƒ€์ด๋จธ๋‚˜ ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ ์“ด๋‹ค.

๋งŒ์•ฝ ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก ๋ฐ›๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ๋„ ์ „์— ์žฌ ๋ Œ๋”๋ง์ด ๋˜์–ด๋ฒ„๋ฆฌ๋ฉด clean up function์„ ํ†ตํ•ด ์ด์ „์— ๋ฐ›์•„์˜จ ์ฝ”๋“œ๋Š” ์ง€์›Œ์ฃผ์„ธ์š”~ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐ŸŒŠ ๊ทธ๋ž˜์„œ ํƒ€์ด๋จธ ์ œ๊ฑฐ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€?

 

 

clearTimeout ์ด๋ผ๋Š” ํƒ€์ด๋จธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค 

 

๐Ÿ’Ž clean up function์€ mount ์‹œ์—๋Š” ์‹คํ–‰์ด ๋˜์ง€ ์•Š๊ณ  unmount์‹œ์—๋งŒ ์‹คํ–‰๋œ๋‹ค. (์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ญ์ œ๋  ๋•Œ)

 

๐Ÿ‹ ํ•ด๋ณด๊ธฐ : useEffect ์‚ฌ์šฉํ•˜์—ฌ input์— ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ’์ด ์ž…๋ ฅ๋œ๋‹ค๋ฉด "๊ทธ๋Ÿฌ์ง€ ๋งˆ์„ธ์š”!" ์ถœ๋ ฅํ•˜๊ฒŒ ํ•ด๋ณด๊ธฐ 

 

js์—์„œ ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜์ค‘์— isNaN์ด ์žˆ๋‹ค!

 

 

isNaN์„ ํ™œ์šฉํ•ด์„œ alert์ด ๋ฐ”๋€” ๋•Œ useEffect๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

Recap : useEffect๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ?

 

1. ํŠน์ • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žฌ ๋ Œ๋”๋งํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์‚ฌ์šฉ

2. ์ปดํฌ๋„ŒํŠธ๊ฐ€ mount๋  ๋•Œ ์ตœ์ดˆ 1ํšŒ๋งŒ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ์œผ๋ฉด ์‚ฌ์šฉ

3. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ญ์ œ๋  ๋•Œ 1ํšŒ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์‚ฌ์šฉ > ๊ทธ๋•Œ๋Š” clean up function ์‚ฌ์šฉ

4. useEffect ์‹คํ–‰์ „์— ๋ญ”๊ฐ€ ์‹คํ–‰ํ•˜๋ ค๋ฉด return()=>{ } ์‚ฌ์šฉํ•˜๋ฉด ๋จ! 

728x90