일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- c
- CSS
- 상태
- 백준
- align-items
- 에라토스테네스의 체
- skt membership
- Javascript
- Gap
- SK바이오사이언스
- pandas
- dataframe
- c++
- Photoshop
- 수학
- Prefix Sums
- 알고리즘
- margin
- 확률
- 소수
- grid
- 포토샵
- 통신사할인
- stl
- Codility
- spring
- series
- Flexbox
- Design Pattern
- 강화학습
Archives
- Today
- Total
sliver__
[React] useRef 본문
728x90
1. useRef란?
useRef는 React에서 DOM 요소에 직접 접근하거나 컴포넌트의 값을 저장할 때 사용하는 훅이다. 상태(useState)와 달리 값이 변경되어도 컴포넌트가 리렌더링되지 않는다는 특징이 있다.
2. useRef의 주요 기능
2.1. DOM 요소 접근
useRef를 사용하면 document.querySelector 없이도 JSX 요소에 직접 접근할 수 있다.
import { useRef, useEffect } from "react";
function InputFocus() {
const inputRef = useRef(null);
useEffect(() => {
inputRef.current.focus();
}, []);
return <input ref={inputRef} type="text" />;
}
위 코드에서는 inputRef가 input 요소를 가리키며, 컴포넌트가 마운트될 때 focus()가 자동으로 실행된다.
2.2. 값 저장 (렌더링 영향 없음)
useRef는 렌더링과 무관하게 값을 유지할 수 있다. 상태(useState)와 달리 값이 변경되어도 리렌더링이 발생하지 않는다.
import { useRef, useState } from "react";
function Counter() {
const countRef = useRef(0);
const [state, setState] = useState(0);
const incrementRef = () => {
countRef.current += 1;
console.log("Ref count:", countRef.current);
};
const incrementState = () => {
setState(state + 1);
};
return (
<div>
<p>State: {state}</p>
<p>Ref: {countRef.current}</p>
<button onClick={incrementState}>State 증가</button>
<button onClick={incrementRef}>Ref 증가</button>
</div>
);
}
위 코드에서 countRef 값이 변경되어도 컴포넌트가 리렌더링되지 않으며, 화면에 바로 반영되지 않는다. 반면 useState를 이용하면 상태 변경 시 리렌더링이 발생한다.
2.3. useRef와 useEffect 함께 사용
useRef는 useEffect와 함께 사용하면 특정 값이 변경될 때 실행할 동작을 지정할 수 있다.
import { useRef, useEffect } from "react";
function Timer() {
const countRef = useRef(0);
useEffect(() => {
const interval = setInterval(() => {
countRef.current += 1;
console.log("현재 카운트:", countRef.current);
}, 1000);
return () => clearInterval(interval);
}, []);
return <p>콘솔을 확인하세요.</p>;
}
위 코드에서는 useRef를 이용해 카운트를 증가시키면서도 리렌더링을 방지할 수 있다.
3. useRef vs useState 비교
기능useRefuseState
값 변경 시 리렌더링 | ❌ | ✅ |
값 유지 | ✅ | ✅ |
DOM 접근 가능 | ✅ | ❌ |
useRef는 렌더링 영향을 주지 않고 값을 저장할 때 유용하며, useState는 상태 변경을 통해 화면을 업데이트할 때 적절하다.
3.1. state와 ref의 차이점
- useState는 값이 변경될 때 컴포넌트가 리렌더링되지만, useRef는 값이 변경되어도 리렌더링되지 않는다.
- useRef는 변경된 값을 화면에 즉시 반영하지 않으며, 직접 DOM을 조작하는 경우에 유용하다.
- useState는 변경될 때마다 새로운 값을 기반으로 렌더링을 수행하지만, useRef는 동일한 객체를 유지하면서 변경을 추적할 수 있다.
- useRef는 보통 렌더링 사이에서 유지해야 하는 값(예: 타이머 ID, 이전 값 저장 등)에 적합하며, useState는 UI 업데이트가 필요한 데이터에 적합하다.
4. 정리
- useRef는 DOM 요소 접근과 렌더링 영향 없이 값을 유지하는 데 사용된다.
- useState와 달리 값이 변경되어도 리렌더링이 발생하지 않는다.
- useEffect와 함께 활용하면 다양한 기능을 구현할 수 있다.
- 상태 변경이 필요하지 않은 경우 useRef를 사용하면 불필요한 렌더링을 방지할 수 있다.
728x90
'Frontend > React' 카테고리의 다른 글
[React] Context API + useReducer (0) | 2025.04.06 |
---|---|
[React] useRef props (react 18 vs 19) (0) | 2025.02.16 |
[React] StrictMode (0) | 2025.02.15 |
[React] tailwind 설치 & TrobuleShooting (0) | 2025.02.15 |
[React] 핵심 개념 (0) | 2025.02.15 |
Comments