Day +48

비트·2023년 6월 20일
0

CodeStates

목록 보기
50/54
post-thumbnail

useRef

React 애플리케이션을 만들 때 DOM을 직접 조작하는 것은 지양해야 한다.

  • 하지만, 개발을 하다 보면 DOM을 직접 건드려야 하는 상황이 발생하기도 한다.
  • 이럴 때 사용할 수 있는 것이 바로 useRef라는 Hook 함수

DOM reference를 잘 활용할 수 있는 useRef

React만 가지고 거의 대부분의 프론트엔드 요구사항을 구현할 수 있었다.

하지만 React로 모든 개발 요구 사항을 충족할 수는 없다.

아래와 같이 DOM 엘리먼트의 주소값을 활용해야 하는 경우 특히 그렇다.

  • focus
  • text selection
  • media playback
  • 애니메이션 적용
  • d3.js, greensock 등 DOM 기반 라이브러리 활용

React는 이런 예외적인 상황에서 useRef로 DOM 노드, 엘리먼트, 그리고 React 컴포넌트 주소값을 참조할 수 있다.

예시

const 주소값을_담는_그릇 = useRef(참조자료형)
// 이제 주소값을_담는_그릇 변수에 어떤 주소값이든 담을 수 있습니다.
return (
    <div>
      <input ref={주소값을_담는_그릇} type="text" />
        {/* React에서 사용 가능한 ref라는 속성에 주소값을_담는_그릇을 값으로 할당하면*/}
        {/* 주소값을_담는_그릇 변수에는 input DOM 엘리먼트의 주소가 담깁니다. */}
        {/* 향후 다른 컴포넌트에서 input DOM 엘리먼트를 활용할 수 있습니다. */}
    </div>);

이 주소값은 컴포넌트가 re-render 되더라도 바뀌지 않는다.
이 특성을 활용하여 아래의 제한된 상황에서 useRef를 활용할 수 있다.
예시

function TextInputWithFocusButton() {
  const inputEl = useRef(null);
  const onButtonClick = () => {
    inputEl.current.focus();
  };
  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Focus the input</button>
    </>);
}

제시된 상황 제외한 대부분의 경우 기본 React 문법을 벗어나 useRef를 남용하는 것은 부적절하고, React의 특징이자 장점인 선언형 프로그래밍 원칙과 배치되기 때문에, 조심해서 사용해야 한다.

profile
Drop the Bit!

0개의 댓글

관련 채용 정보