최근 기술 면접을 보며
useState
와useRef
의 차이를 아시나요?
라는 질문을 받았습니다. 당시 뭐라 답했는지 기억은 나지 않지만 긴장감 속에서 제대로 답하지 못했던 기억이 있습니다.
useState
와 useRef
에 대해서 정리해보겠습니다.
공식 문서에 따르면
useState
는 컴포넌트에 state 변수를 추가할 수 있는 React Hook 입니다.
React에서 컴포넌트는 자신의 상태 또는 props가 바뀌면 리렌더링 됩니다.
상태를 관리하기 위해 React에서 useState
를 활용합니다.
const [state,setState] = useState(initialState);
useState
는 상태 유지 값가 그 값을 갱신하는 함수를 반환합니다.
setState
함수는 새 state를 받아 컴포넌트 리렌더링 큐에 등록합니다.
컴포넌트는 다음 렌더링 시에 useState
를 통해 반환받은 첫번째 값은 항상 갱신된 최신 state가 됩니다.
import { useState } from "react";
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>현재 카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>증가</button>
<button onClick={() => setCount(count - 1)}>감소</button>
</div>
);
}
공식 문서에 따르면
useRef
렌더링에 필요하지 않은 값을 참조할 수 있는 React Hook 입니다.
useRef
는 useState
와 달리 리렌더링을 유발하지 않습니다. 값이 변경되어도 컴포넌트가 다시 렌더링 되지 않습니다.
ref
속성을 사용하여 특정 DOM 요소에 접근할 때 활용되며 렌더링과 무관하게 값을 유지해야 할 경우 유용합니다.
import { useRef } from "react";
function Example() {
const inputRef = useRef(null);
const focusInput = () => {
inputRef.current.focus(); // input 요소에 직접 접근하여 포커스를 줌
};
return (
<div>
<input ref={inputRef} type="text" />
<button onClick={focusInput}>Focus Input</button>
</div>
);
}
특징 | useState | useRef |
---|---|---|
값 변경 시 리렌더링 | O | X |
값 유지 여부 | O | O |
DOM 요소 접근 | X | O |
상태 변경 함수 제공 | O(setState ) | X(직접 수정) |
값 접근 방법 | 변수로 직접 접근 | .current 속성으로 접근 |
초기화 시점 | 컴포넌트 렌더링 마다 | 컴포넌트 마운트 시 한 번만 |
업데이트 시점 | setState 호출 후 다음 렌더링 | 즉시 |
useState
useRef
useRef
✅ 참고