[React] setTimeout, setInterval

yeonddoriยท2023๋…„ 9์›” 18์ผ
0

AID_WEB

๋ชฉ๋ก ๋ณด๊ธฐ
10/10

๐Ÿ“ setTimeout

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๊ฐ€ ๋ณ€๊ฒฝ์ด ๋  ๋•Œ๋งŒ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋‹ฌ๋ผ๊ณ  ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

clearTimeout

setTimeout ํƒ€์ด๋จธ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ํƒ€์ด๋จธ๋ฅผ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค.

useEffect(() => {
  const timer = setTimeout(() => console.log('Initial timeout!'), 1000);
  return () => clearTimeout(timer);
}, []);

useEffect() ์•ˆ์— return()์„ ์ถ”๊ฐ€ํ•˜๋ฉด component๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ ํŠน์ • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์— clearTimeout์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํƒ€์ด๋จธ๋ฅผ ๋ฐ”๋กœ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ setInterval

setTimeOut๊ณผ ๋น„์Šทํ•œ ํ•จ์ˆ˜๋กœ, ์ง€์ •ํ•œ ๋ฐ€๋ฆฌ์ดˆ ์ฃผ๊ธฐ๋งˆ๋‹ค ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. setTimeout์ฒ˜๋Ÿผ setInterval๋„ clearTimeout ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„ํš๋œ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋„๋ก ํƒ€์ด๋จธ ID๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  useEffect(()=>{
    let timer = setInterval(()=>{ alertSet(false) }, 2000);
  });    

์œ„ ์ฝ”๋“œ๋Š” 2์ดˆ๋งˆ๋‹ค setInterval()์ด ๊ณ„์†ํ•ด์„œ ์‹คํ–‰๋˜๊ฒŒ ๋œ๋‹ค.

setTimeout : ์ผ์ • ์‹œ๊ฐ„ ํ›„์— ํ•ด๋‹น func ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜
setInterval : ์‹œ๊ฐ„๋งˆ๋‹ค ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•ด๋‹น func ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜


๐Ÿช„ ๋งˆ์น˜๋ฉด์„œ

setTimeout ๋ฌธ๋ฒ•์„ ๋ณด๋‹ˆ ๋ฌธ๋“ ์ด๊ฒƒ์ €๊ฒƒ ์ฐพ์•„๋ณด๋‹ค ๋ฐœ๊ฒฌํ•˜๊ณ  ๊ทธ ๋‹น์‹œ์—๋Š” ์ดํ•ด๋„ ๋ชปํ•˜๊ณ  ์ผ๋˜ ๊ธฐ์–ต์ด ๋– ์˜ฌ๋ž๋‹ค. JSX์—๋„ ์ด๋ ‡๊ฒŒ ์‹œ๊ฐ„์„ ์ž˜ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋“ค์ด, ํŠนํžˆ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ๋„ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์ •๋ง ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€