React
useRef란?
Lulung
2024. 12. 19. 11:28
useRef는 React에서 제공하는 훅 중 하나로, 참조(ref)를 생성하고 이를 React 컴포넌트 내에서 DOM 요소나 값에 접근할 수 있게 해준다. 이는 주로 DOM 요소에 대한 참조와 변경되지 않는 값을 저장하기 위해 사용된다.
기본 개념
useRef는 변경 가능한 객체를 반환하며, 이 객체는 current라는 프로퍼티를 가진다. 이 프로퍼티를 통해 직접 값이나 DOM 요소를 할당하고 이를 참조할 수 있다.
const myRef = useRef(initialValue);
- myRef : useRef로 생성된 참조 객체
- myRef.currnet : 참조된 값, DOM 요소
useRef는 리렌더링과 관계없이 참조된 값을 계속 유지한다. 즉, 값이 변경되도 리렌더링을 일으키지 않으며, 이는 성능 최적화에 유리하다.
사용 예시
1. DOM 요소에 접근 : useRef는 주로 DOM 요소를 참조할 때 사용한다.
import { useRef, useEffect } from "react";
const FocusInput = () => {
const inputRef = useRef(); // inputRef는 DOM 요소를 참조할 객체
useEffect(() => {
// 컴포넌트가 렌더링된 후, input 요소에 포커스를 줍니다.
inputRef.current.focus();
}, []);
return <input ref={inputRef} />;
};
- useRef()를 사용해 inputRef 참조 객체를 만들고 input 요소에 ref={inputRef} 로 연결한다
- inputRef.current는 실제 DOM 요소인 <input>을 참조하며, 이를 통해 해당 요소에 focus를 줄 수 있다.
2. 변경되지 않는 값 저장 : 값이 변경되어도 컴포넌트가 다시 렌더링되지 않기 때문에 컴포넌트 렌더링 간에 값을 저장하고 유지하는 데도 사용할 수 있다.
import { useRef } from "react";
const Timer = () => {
const countRef = useRef(0); // countRef는 초기 값 0으로 설정된 참조 객체
const increment = () => {
countRef.current += 1; // countRef.current의 값만 변경
console.log(countRef.current);
};
return (
<div>
<button onClick={increment}>Increment</button>
</div>
);
};
- countRef는 값이 변경되어도 리렌더링을 일으키지 않는다.
- countRef.currnet는 리렌더링 없이 값만 변경된다.
3. 기존 값 참조 및 업데이트
import { useRef, useState } from "react";
const Timer = () => {
const [count, setCount] = useState(0);
const intervalRef = useRef(); // setInterval ID를 저장할 ref
const startTimer = () => {
intervalRef.current = setInterval(() => {
setCount((prevCount) => prevCount + 1);
}, 1000);
};
const stopTimer = () => {
clearInterval(intervalRef.current); // 저장된 setInterval ID로 타이머 정지
};
return (
<div>
<p>Count: {count}</p>
<button onClick={startTimer}>Start</button>
<button onClick={stopTimer}>Stop</button>
</div>
);
};
- intervalRef는 setInterval의 ID를 저장하고, 이를 clearInterval에서 참조하여 타이머를 정지할 수 있게 해준다.