** DOM 엘리먼트의 주소값을 활용해야 하는 경우
- focus
- text selection
- media playback
- 애니메이션 적용
- d3.js, greensock 등 DOM 기반 라이브러리 활용
이런 예외적인 상황에서useRef
로 DOM노드, 엘리먼트,React컴포넌트 주소값을 참조할 수 있다.const 주소값을_담는_그릇 = useRef(참조자료형) // 이제 주소값을_담는_그릇 변수에 어떤 주소값이든 담을 수 있습니다. return ( <div> <input ref={주소값을_담는_그릇} type="text" /> {/* React에서 사용 가능한 ref라는 속성에 주소값을_담는_그릇을 값으로 할당하면*/} {/* 주소값을_담는_그릇 변수에는 input DOM 엘리먼트의 주소가 담깁니다. */} {/* 향후 다른 컴포넌트에서 input DOM 엘리먼트를 활용할 수 있습니다. */} </div>);
이 주소값은 컴포넌트가 re-render되도 바뀌지 않는다.
function TextInputWithFocusButton() { const inputEl = useRef(null); const onButtonClick = () => { inputEl.current.focus(); }; return ( <> <input ref={inputEl} type="text" /> <button onClick={onButtonClick}>Focus the input</button> </>); }
위의 제한된 상황에서
useRef
를 활용할 수 있다.
제시한 상황을 제외한 대부분의 경우 기본 React 문법을 벗어나useRef
를 남용하는것은 부적절하고 선언형 프로그래밍 원칙과 배치되기 때문에 조심해서 사용해야 한다.
참조, 출처 : 코드스테이츠