스터디/프론트 스터디

useRef vs let

0_TLS 2026. 5. 5. 16:17

리액트에서 변수를 관리할 때 useRef를 사용하는 것과 let을 사용하는 것은 어떤 차이가 있나?

useRef()와 let의 가장 큰 차이점 : 리렌더링 시의 동작 방식

- let으로 선언한 변수는 컴포넌트가 리렌더링될 때마다 초기화되어서 이전 값을 잃어버리는 반면 useRef()로 만든 변수는 리렌더링되어도 값이 유지됨. 

useRef()는 useState()와 다르게 상태 값이 변경되어도 컴포넌트가 리렌더링이 유발되지 않음.

 

** 실제로 useRef()는 주로 DOM요소에 접근할 때 사용함. 

ex. input에 focus를 주거나 스크롤 위치를 조정하는 경우에 ref를 활용. setTimeout()이나 setInterval()의 ID를 저장할때도 활용.

컴포넌트가 리렌더링되어도 타이머 ID가 유지되어야 cleanup함수에서 해당 값을 이용하여 타이머를 정리할 수 있기 때문

 

컴포넌트 외부에서 let을 선언하면 리렌더링에 영향을 받나요?

-> 받지 않음. 컴포넌트 외부에서 선언된 let변수는 리렌더링의 영향을 받지 않지만 권장되지 않는 패턴임.

1. 컴포넌트 외부의 변수는 모든 컴포넌트 인스턴스가 공유하게됨.

=> 즉 같은 컴포넌트를 여러 번 사용할 때 예상치 못한 동작이 발생할 수 있음

2. 전역 변수처럼 동작하기 때문에 코드의 예측 가능성과 유지보수성이 떨어짐.

3. 리액트의 원칙 중 하나인 단방향 데이터 흐름이 위배됨.

=> 상태 관리가 리액트의 생명주기 밖에서 이루어지기 때문

 

따라서 컴포넌트의 상태를 관리할 때는 useStae()나 useRef()와 같은 공식적인 방법을 사용하는 것 권장.

'스터디 > 프론트 스터디' 카테고리의 다른 글

브라우저 메모리 캐시와 디스크 캐시  (0) 2026.05.05
never와 unknown 타입  (0) 2026.04.21
css 속성 dvh, svh, lvh 란?  (0) 2026.04.16