리액트에서는 컴포넌트의 상태나 값을 관리하기 위해 다양한 훅(Hooks)을 제공해준다.
그 중useState와useRef는 가장 많이 사용되는 훅들 중 하나이다.
공부하다보니 이 두 훅이 스리~살짝 비슷해보여서 헷갈렸는데 찾아보니 서로 완전 다른 뚜렷한 목적을 갖고 있다는 것을 알게되어 이 둘의 차이점을 정리해보려 한당.
사실 아직 성능을 논하기에 넘나 쪼렙이고 내용도 어렵지만 그래도 알아두자고!
해당 내용을 찾아보다가 https://www.inflearn.com/community/questions/608346/useref%EB%A5%BC-%EC%84%A0%ED%98%B8%ED%95%98%EC%8B%9C%EB%8A%94-%EC%9D%B4%EC%9C%A0%EA%B0%80-%EA%B6%81%EA%B8%88%ED%95%A9%EB%8B%88%EB%8B%A4
이 답변 글도 도움이 많이 되었다!
- useState 👉 리액트가 직접 폼요소에 개입, 제어하는 방식
- useRef 👉 리액트의 간섭을 최소화하고 HTML native 기능을 최대한 활용하는 방식
const [count, setCount] = useState(0);
ref.current에 저장됨. { current: initialValue } 객체를 반환하며, ref.current로 값에 접근할 수 있다.const countRef = useRef(0);
useState는 상태가 변경될 때 마다 UI가 업데이트 되도록 설계되어있다.| 특징 | useState | useRef |
|---|---|---|
| 리렌더링 | 값이 변경되면 리렌더링 | 값이 변경되어도 리렌더링되지 않음 |
| 사용 사례 | UI에 영향을 주는 상태 관리 | DOM 접근, 렌더링 간 값 유지, 타이머 참조 |
| 값 업데이트 | 상태 값이 변경되면 UI가 다시 그려짐 | 값이 변경되어도 렌더링은 발생하지 않음 |
| 값의 접근 방식 | state와 setState 함수로 관리 | ref.current으로 값 접근 및 변경 |
| 성능 | 불필요한 렌더링이 발생할 수 있음 | 렌더링을 피할 수 있어 성능에 유리 |