[React] useEffect
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()=>{ } ์ฌ์ฉํ๋ฉด ๋จ!