useRef는 render 사이에 지속되는 가변 컨테이너 { current: ... }를 반환하지만, 결정적으로 이를 변경해도 re-render가 트리거되지 않습니다. 두 가지 별개의 용도가 있습니다:
1. DOM 노드 접근
jsx
() {
inputRef = ();
( {
inputRef..();
}, []);
;
}
render를 유발하지 않고 무언가를 기억하는 데 사용하세요 — 타이머 id, prop의 이전 값, 라이브러리 인스턴스 등:
function Timer() {
const intervalId = useRef(null);
const start = () => {
intervalId.current = setInterval(tick, 1000); // render 사이에 저장
};
const stop = () => clearInterval(intervalId.current);
}
const countRef = useRef(0);
countRef.current++; // 값을 변경하지만 UI는 업데이트되지 않음
const [count, setCount] = useState(0);
setCount(count + 1); // 값을 변경하고 re-render함
따라서 규칙은: UI가 값을 반영해야 한다면 state를 사용하고, 단지 "무대 뒤" 데이터라면 ref를 사용하세요. render 중에 ref.current를 읽기/쓰기 하는 것은 권장되지 않습니다(effect/핸들러에서 하세요). ref는 React의 render 사이클에 의해 추적되지 않기 때문입니다.