1 분 소요

✔️ useRef, 언제 사용할까?

useRef는 크게 DOM 요소에 접근하는 경우, 렌더링을 일으키지 않고 값을 변경시키는 두 가지 경우에 사용합니다.

Vanilla JavaScript로 특정 DOM 요소에 접근하고자 하는 경우에는 getElementById 혹은 querySelector 같은 함수를 사용하였는데요. 리액트에서는 useRef라는 Hook를 사용하거나, 콜백 함수 혹은 React.createRef(클래스형 컴포넌트) 라는 함수를 사용합니다.

✔️ useRef 사용법

1
import { useRef } from 'react';

useRef를 사용하기 위해서는 가장 먼저 react에서 useRef를 import 받아야 합니다.

기본 형태는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
//Ref 객체 생성
const ref = useRef();

//current -> DOM 가리킴. 아래의 경우는 <input /> 태그 DOM을 가리킨다.
nameInput.current.focus();

//접근하고 싶은 태그에는 ref 속성을 준다.
<input name="lime"
  placeholder="focus!!"
  onChange={onChange}
  value={value}
  ref={nameInput}
/>

✔️ 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function Sample() {

  const nameInput = useRef();

  //포커스 잡기
  const onFocus = () => {
    nameInput.current.focus();
  };

  return (
        <div>
          <input name="lime"
            placeholder="focus!!"
            onChange={onChange}
            value={value}
            ref={nameInput}
          />
          <button onClick={onFocus}>포커스</button>
        </div>
  );
}

위 예시는 useRef를 사용하여 포커스 버튼을 눌렀을 때 해당 input에 포커스가 잡히도록 한 것입니다.

✔️ 변수 관리

useState를 사용하여 변수를 상태값으로 관리하게 되면 값이 바뀔 때 마다 컴포넌트가 렌더링 되는데, useRef를 사용하여 변수를 관리한다면 컴포넌트가 리렌더링 되지 않습니다. 또한 상태로 관리하는 경우에는 상태를 바꾸는 함수를 호출한 다음 렌더링 하고 나서 업데이트 된 상태를 조회할 수 있는데, useRef를 사용하는 경우에는 설정 후 바로 조회하는 것이 가능합니다. 더불어 useRef로 만들어진 변수는 React의 전역 저장소에 저장되기 때문에 함수를 다시 호출하더라도 마지막으로 업데이트한 current 값이 유지됩니다.

1
2
3
4
const nextId = useRef(3);
const onCreate = () => {
  nextId.current += 1;
};

해당 기능이 유용하게 사용되는 경우

  • setTimeout, setInterval을 통해 만들어진 id
  • scroll 위치
  • 외부 라이브러리를 사용하여 생성된 인스턴스

Today I Learned

React에서 특정 DOM을 가리키는 경우에 useRef를 사용한다는 것과, 어떤 식으로 사용되는지에 대해 알게되었습니다 :)

참고사이트

https://react.vlpt.us/basic/10-useRef.html
https://ko.reactjs.org/docs/hooks-reference.html#useref

🔔포스팅 공지
개인 공부 기록용 블로그 입니다.
잘못된 부분이 있을 시 메일이나 댓글로 지적해주시면 감사드리겠습니다 :)

댓글남기기