Conceptly
← 전체 목록
🎯

Ref

탈출구재렌더 없이 값을 보관하거나 실제 DOM 노드에 직접 닿는 React의 탈출구

Ref는 React가 렌더 사이에 유지해 주는 mutable한 보관 상자입니다. 이를 통해 실제 DOM 노드를 직접 가리키거나, 화면에 바로 반영될 필요가 없는 값을 기억할 수 있습니다.

아키텍처 다이어그램

🔗 관계 다이어그램

점선 애니메이션은 데이터 또는 요청의 흐름 방향을 나타냅니다

왜 필요한가요?

모든 값을 state에 넣으면 필요하지 않은 재렌더가 늘고, focus 이동이나 스크롤 제어처럼 실제 DOM 노드에 명령해야 하는 작업은 state만으로 자연스럽게 표현하기 어렵습니다. 선언형 렌더링이 기본이더라도, 일부 작업은 여전히 명령형 접근을 필요로 합니다.

왜 이런 방식이 등장했나요?

React는 가능한 한 UI를 선언형으로 다루게 만들었지만, 브라우저 API와 외부 라이브러리는 여전히 명령형 모델이 많습니다. 그래서 화면 계산과는 별도로 노드 참조나 mutable 값을 붙잡아 둘 통로가 필요했고, ref가 그 역할을 맡게 됐습니다.

안에서 어떻게 동작하나요?

useRef를 호출하면 current 프로퍼티를 가진 객체가 반환되고, 이 객체는 렌더가 반복돼도 같은 참조를 유지합니다. DOM 요소에 ref를 연결하면 React가 커밋 시점에 current에 실제 노드를 넣어 줍니다. 일반 값 저장에도 쓸 수 있지만, current를 바꾼다고 자동으로 화면이 다시 그려지지는 않습니다.

언제 쓰나요?

실무에서는 input autofocus, 드래그 시작 좌표 보관, 이전 props 기억, 외부 차트 라이브러리 인스턴스 유지 같은 장면에서 ref가 자주 쓰입니다. 다만 ref를 state 대체품처럼 넓게 쓰기 시작하면 화면과 값이 어긋나기 쉬우므로, 렌더링에 영향을 줘야 하는 값인지부터 먼저 확인하는 습관이 중요합니다.

input focus 이동과 scroll 제어타이머 ID나 이전 값 보관외부 라이브러리 인스턴스 참조 유지렌더링과 무관한 mutable 값 저장