[251224] TIL
Today I Learned (2025-12-24)
๋ฆฌ์กํธ์์ ๋ณ์ ๊ด๋ฆฌ ์, useRef์ let ์ฌ์ฉ ์ฐจ์ด์
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ฆฌ๋ ๋๋ง ์ ๋์ ๋ฐฉ์์
let
- ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค ์ด๊ธฐํ ๋์ด์ ์ด์ ๊ฐ์ ์์ด๋ฒ๋ฆผ
useRef
- ๋ฆฌ๋ ๋๋ง ๋์ด๋ ๊ฐ์ ์ ์ง๋จ
- ์ํ๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ ๋ฆฌ๋ ๋๋ง์ด ์ ๋ฐ๋์ง ์์
์ค์ ์ฌ์ฉ ์ฌ๋ก
useRef
- DOM ์์์ ์ ๊ทผํ ๋ ์ฌ์ฉ
- setTimeout, setInterval ์ ID ์ ์ฅํ ๋๋ ์ ์ฉ
useEffect(() => {
const intervalId = window.setInterval(() => {
console.log("tick");
}, 1000);
return () => {
clearInterval(intervalId);
};
}, []);
- ์ด๋ ๊ฒ ํ๋ฉด ์กฐ๊ฑด๋ถ๋ก ์์/์ค์งํ๊ฑฐ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ clear ํด์ผ ํ ๋ ํ๊ณ๊ฐ ์์
"use client";
import { useEffect, useRef } from "react";
export function TimerExample() {
const intervalRef = (useRef < number) | (null > null);
useEffect(() => {
intervalRef.current = window.setInterval(() => {
console.log("tick");
}, 1000);
return () => {
if (intervalRef.current !== null) {
clearInterval(intervalRef.current);
intervalRef.current = null;
}
};
}, []);
return <div>์ฝ์์ ํ์ธํ์ธ์</div>;
}
- ์ ์ฒ๋ผํ๋ฉด ๋ฆฌ๋ ๋๋ง๋์ด๋ ์ ์ง, cleanup ์ ์ ํํ ์ ๊ทผ ๊ฐ๋ฅ
- state ์ฒ๋ผ ๋ฆฌ๋ ๋๋ง์ ์ ๋ฐํ์ง ์์
์ปดํฌ๋ํธ ์ธ๋ถ์์ let ์ ์ธํ๋ฉด ๋ฆฌ๋ ๋๋ง ์ํฅ์ ์ ๋ฐ์ง ์๋?
- ์ปดํฌ๋ํธ ์ธ๋ถ์ ๋ณ์๋ ๋ชจ๋ ์ปดํฌ๋ํธ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๊ฒ ๋จ
- ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ ํ ๋ ์๊ธฐ์น ๋ชปํ ๋์์ด ๋ฐ์ํ ์๋ ์๋ค.
let count = 0;
function Counter() {
count++;
return <div>{count}</div>;
}
<Timer />
<Timer />
- ๊ฐ์ ์ปดํฌ๋ํธ 2๊ฐ๊ฐ ๊ฐ์ count ๋ฅผ ์ฌ์ฉํจ
- useRef๋ ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ง๋ค ๋ณ๋ ์ ์ฅ ๊ณต๊ฐ์ ์ฌ์ฉํจ, ๋ฆฌ์กํธ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ธ์คํด์ค๋ณ๋ก ๊ด๋ฆฌํจ
- ์ ์ญ ๋ณ์์ฒ๋ผ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋์ ์์ธก ๊ฐ๋ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋จ์ด์ง
- ๋ฆฌ์กํธ ์์น ์ค ํ๋์ธ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ์๋ฐฐ๋จ
- ์ํ๊ด๋ฆฌ๊ฐ ๋ฆฌ์กํธ ์๋ช ์ฃผ๊ธฐ ๋ฐ์์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์
- ์ํ ๊ด๋ฆฌ ํ ๋๋ useState๋ useRef๋ฅผ ์ฐ๋ ๊ฒ์ด ์ข๋ค.
Leave a comment