Function Component์์ Hook์ ์ด์ฉํ์ฌ state ๊ด๋ฆฌ๋ฅผ ์งํํ๋ค. ์ด ๋, setTimeout์ ์ฌ์ฉํ๋ฉด ์ผ์ ์๊ฐ ํ ์ฝ๋๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ ์ ์๋ค.
setTimeout์ JavaScript์์์ ๋ง์ฐฌ๊ฐ์ง๋ก React์์๋ ๋์ผํ๊ฒ ์๋ํ๋ค.
setTimeout(() => console.log('Initial timeout!'), 1000);
์ด ํจ์๋ ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ผ๋ฉฐ, ์ฒซ ๋ฒ์งธ๋ ์คํํ๋ ค๋ ์ฝ๋ฐฑ ํจ์์ด๊ณ , ๋ ๋ฒ์งธ๋ ํจ์๊ฐ ํธ์ถ๋๊ธฐ ์ ์ ์๊ฐ ์ด๊ณผ๋ฅผ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์ง์ ํ๋ค.
useEffect(() => {
const timer = setTimeout(() => console.log('Initial timeout!'), 1000);
}, []);
์ด์ ๊ฐ์ด component๊ฐ ๋ง์ดํธ๋ ๋ ์ ํ์๊ฐ์ ํ ๋ฒ ์คํํ๋ ค๋ฉด useEffect๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ์ด๋ ์ฌ๋ ๋๋ง์ ๊ณ ๋ คํ์ฌ ํจ์ component์ ์๋ฌด ๊ณณ์๋ ๋ฐฐ์นํ์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค.
useEffect() ํจ์ ๋๋ถ๋ถ์ ๋๊ดํธ[]๋ฅผ ์ง์ด๋ฃ์ ์ ์๋๋ฐ, ์ฌ๊ธฐ์ state(์ฌ๋ฌ ๊ฐ๋ ๊ฐ๋ฅ)๋ฅผ ๋ฃ์ ์ ์๋ค. ๋๊ดํธ[]๋ ์ผ์ข
์ ์คํ ์กฐ๊ฑด์ผ๋ก, ๋ง์ฝ์ ์ ์ฝ๋์์ [click]์ ๋ฃ์ผ๋ฉด click ์ด๋ผ๋ ์ด๋ฆ์ state๊ฐ ๋ณ๊ฒฝ์ด ๋ ๋๋ง ์
๋ฐ์ดํธ๋ฅผ ์คํํด ๋ฌ๋ผ๊ณ ์ ๋ฌํ๋ ๊ฒ์ด๋ค.
setTimeout ํ์ด๋จธ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ํ์ด๋จธ๋ฅผ ํด์ ํด์ผ ํ๋ค.
useEffect(() => {
const timer = setTimeout(() => console.log('Initial timeout!'), 1000);
return () => clearTimeout(timer);
}, []);
useEffect() ์์ return()์ ์ถ๊ฐํ๋ฉด component๊ฐ ์ฌ๋ผ์ง ๋ ํน์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค. ์ฌ๊ธฐ์ clearTimeout์ ์ถ๊ฐํ๋ฉด ํ์ด๋จธ๋ฅผ ๋ฐ๋ก ํด์ ํ ์ ์๋ค.
setTimeOut๊ณผ ๋น์ทํ ํจ์๋ก, ์ง์ ํ ๋ฐ๋ฆฌ์ด ์ฃผ๊ธฐ๋ง๋ค ํจ์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ๋ ํจ์์ด๋ค. setTimeout์ฒ๋ผ setInterval๋ clearTimeout ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ณํ๋ ํจ์์ ์คํ์ ์ทจ์ํ ์ ์๋๋ก ํ์ด๋จธ ID๊ฐ์ ๋ฐํํ ์ ์๋ค.
useEffect(()=>{
let timer = setInterval(()=>{ alertSet(false) }, 2000);
});
์ ์ฝ๋๋ 2์ด๋ง๋ค setInterval()์ด ๊ณ์ํด์ ์คํ๋๊ฒ ๋๋ค.
setTimeout : ์ผ์ ์๊ฐ ํ์ ํด๋น func ์คํํ๋ ํจ์
setInterval : ์๊ฐ๋ง๋ค ์ฃผ๊ธฐ์ ์ผ๋ก ํด๋น func ์คํํ๋ ํจ์
setTimeout ๋ฌธ๋ฒ์ ๋ณด๋ ๋ฌธ๋ ์ด๊ฒ์ ๊ฒ ์ฐพ์๋ณด๋ค ๋ฐ๊ฒฌํ๊ณ ๊ทธ ๋น์์๋ ์ดํด๋ ๋ชปํ๊ณ ์ผ๋ ๊ธฐ์ต์ด ๋ ์ฌ๋๋ค. JSX์๋ ์ด๋ ๊ฒ ์๊ฐ์ ์ ๋ค๋ฃฐ ์ ์๋ ๋ฉ์๋๋ค์ด, ํนํ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋ ๋ฉ์๋๋ ์กด์ฌํ๋ค๋ ๊ฒ์ด ์ ๋ง ์ ์ฉํ๊ฒ ์ฐ์ผ ์ ์์ ๊ฒ ๊ฐ๋ค.