[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