[React] ๋ฆฌ์กํธ์์ setTimeout ๋ ํธํ๊ฒ ์ฐ๊ธฐ
React์์ setTimeout ๊ฐ์ ํ์ด๋จธ API๋ฅผ ์ฌ์ฉํ  ๋ ์ปดํฌ๋ํธ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๋ ์๊ธฐ์น ์์ ์์ธ๊ฐ ๋ฐ์ํ  ์ ์๋ค. ์๋ฅผ ๋ค์ด ํ์ด๋จธ๋ฅผ ์ค์ ํ ํ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ผ๋ ํ์ด๋จธ๋ ์ฌ์ ํ ์คํ๋๊ณ , ์ดํ ํ์ด๋จธ ์ฝ๋ฐฑ์์ ์ธ๋ง์ดํธ๋ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ์
๋ฐ์ดํธํ๋ ค๊ณ  ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ  ์ ์๋ค.
์ ๊ฐ์ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด useEffect์ ํด๋ฆฐ์
 ํจ์์ ํ์ด๋จธ ํด์  ๋ก์ง์ ์ถ๊ฐํ๋ค. ํ์ง๋ง ํ ์ปดํฌ๋ํธ์์ ์ฌ๋ฌ ํ์ด๋จธ๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฟ๋ง ์๋๋ผ ํ์ด๋จธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ก์ง ๋๋ฌธ์ ์ปดํฌ๋ํธ์ ๋ณต์ก์ฑ์ด ๋์์ง ์ ์๋ค.
๋ง์ฝ ๋ณ๋์ ์ปค์คํ  ํ ์์ ํ์ด๋จธ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ปค์คํ  ํ ์ด ์ธ๋ง์ดํธ ๋ ๋ ๋ชจ๋ ํ์ด๋จธ๋ฅผ ์๋์ผ๋ก ํด์ ํ๋ค๋ฉด ํด๋น ํ ์ ์ฌ์ฉํ๋ ๊ณณ์์ ํ์ด๋จธ ์ค์ ๊ณผ ํ์ด๋จธ ์๋ ํด์ ์๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋๋ค. ์ฆ, ํ์ด๋จธ ์ค์ /ํด์  ๋ก์ง์ ํ ๋ด๋ถ์ ์บก์ํํจ์ผ๋ก์จ ์ปดํฌ๋ํธ ์์ฒด๋ ํ์ด๋จธ์ ์ธ๋ถ ๊ตฌํ๋ณด๋ค ๋น์ฆ๋์ค ๋ก์ง์ ๋ ์ง์คํ ์ ์๊ฒ ๋๋ค.
useTimeouts.ts ํ
 ์ ์ โผ
type TimerID = NodeJS.Timeout;
export default function useTimeouts() {
  const timerIDs = useRef<Set<TimerID>>(new Set());
  const setTimer = (callback: () => void, delay: number) => {
    const id = setTimeout(callback, delay);
    timerIDs.current.add(id);
    return id;
  };
  const clearTimer = (id: TimerID) => {
    clearTimeout(id);
    timerIDs.current.delete(id);
  };
  const clearAllTimers = () => {
    timerIDs.current.forEach(clearTimeout);
    timerIDs.current.clear();
  };
  useEffect(() => {
    // ํ
์ ํธ์ถํ ์ปดํฌ๋ํธ ์ปดํฌ๋ํธ ์ธ๋ง์ดํธ์ ๋ฑ๋กํ ๋ชจ๋  ํ์ด๋จธ ID ํด์ 
    return () => clearAllTimers();
  }, []);
  return { setTimer, clearTimer, clearAllTimers };
}
useTimeouts ์ฌ์ฉ ์์ โผ
const { setTimer, clearTimer, clearAllTimers } = useTimeouts();
const timerID = setTimer(() => { /* ... */ }, 500); // ํ์ด๋จธ ์ค์ 
clearTimer(timerID); // ํ์ด๋จธ ์๋ ํด์ 
clearAllTimers(); // ๋ชจ๋  ํ์ด๋จธ ์๋ ํด์ 
๐ก React ํ
์ ๊ฐ ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ง๋ค ๋
๋ฆฝ์ ์ธ ์ํ ๊ณต๊ฐ์ ๊ฐ๋๋ค. ๋๋ฌธ์ A ์ปดํฌ๋ํธ์ B ์ปดํฌ๋ํธ์์ useTimeouts๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ํ
 ๋ด๋ถ์ ์๋ ์ํ๋ ๋
๋ฆฝ์ ์ด๋ค.
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
- 
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ 
- 
์นด์นด์คํก
์นด์นด์คํก 
- 
๋ผ์ธ
๋ผ์ธ 
- 
ํธ์ํฐ
ํธ์ํฐ 
- 
Facebook
Facebook 
- 
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ 
- 
๋ฐด๋
๋ฐด๋ 
- 
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ 
- 
Pocket
Pocket 
- 
Evernote
Evernote 
๋ค๋ฅธ ๊ธ
- 
[HTML] select, option ์์์ ์ฃผ์ ์์ฑ๊ณผ ํน์ง[HTML] select, option ์์์ ์ฃผ์ ์์ฑ๊ณผ ํน์ง2024.05.29
- 
[Algorithm] ์์ด / ์กฐํฉ ๊ฐ๋ ๊ณผ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ[Algorithm] ์์ด / ์กฐํฉ ๊ฐ๋ ๊ณผ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ2024.05.28
- 
[React] ํฌ๋กฌ ํ์ฅ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ๋ฐฐ๊ฒฝ ์ง์ ๋ฐ ํํ ๋ฆฌ์ผ[React] ํฌ๋กฌ ํ์ฅ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ๋ฐฐ๊ฒฝ ์ง์ ๋ฐ ํํ ๋ฆฌ์ผ2024.05.28
- 
[Algorithm] ์๋ฐ์คํฌ๋ฆฝํธ Map์ผ๋ก ๊ตฌํํ๋ LRU Cache ์๊ณ ๋ฆฌ์ฆ[Algorithm] ์๋ฐ์คํฌ๋ฆฝํธ Map์ผ๋ก ๊ตฌํํ๋ LRU Cache ์๊ณ ๋ฆฌ์ฆ2024.05.28