본문 바로가기

Front-end/React

useRef 란 ?

useRef 란 리액트 Hooks 중의 하나로 useState나 useEffect 만큼 자주 사용되는 훅은 아니지만, 보다 심도 있는 react 코딩을 위해서는 알아두는 것이 좋은 hooks 입니다. useRef의 주 기능은 기존 바닐라 자바스크립트에서 특정 DOM을 사용하던 것처럼 특정 엘리먼트의 속성을 활용하는 것입니다.

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

위의 코드는 useRef를 통해서 input태그에 focus를 주는 코드입니다. useRef를 쓰면 .current 라는 객체에 ref로 지정한 엘리먼트의 DOM값을 확인할 수 있고 조종할 수 있습니다. 

또한 useRef의 두 번째 사용법은 특정 변수를 담는 그릇으로 활용하는 것입니다. useRef로 변수를 관리하게 되면 그 변수가 업데이트 된다고 해서 컴포넌트가 리렌더링 되지 않는다는 특징이 있습니다. 이것을 활용해서 굳이 리렌더링할 필요가 없는 변수의 경우는 useRef로 관리해주는 것이 효율적이라고 할 수 있습니다. 

보통 useRef를 변수로 활용하는 경우는 다음과 같습니다.

- setTimeout, setInterval을 통해 만들어진 id

- scroll 위치

- 배열에 새 항목을 추가할 때 필요한 고유값 key

const test = () => {
	const [result, setResult] = useState('');
    const [imgCoord, setImgCoord] = useState(rspCoords.바위);
    const [score, setScore] = useState(0);
    const inverval = useRef();
    
    useEffect(()=> {
    	interval.current = setInterval(changeHand, 100);
        return () => {
        	clearInterval(interval.current);
        }
     }, [imgCoord]);
     

위의 코드는 컴포넌트가 마운트 될 때 interval이라는 useRef에 변수를 담아서 setInterval 함수를 실행시킨 후에, 언마운트 될 때, 해당 함수를 clearInterval하는 코드입니다. 위의 예시 외에도 다양한 방식을 통해 변수를 저장하는 저장소로서의 역할을 할 수 있는 useRef Hook을 잘 활용한다면, 보다 좋은 코드를 짤 수 있게 될 것입니다.

 

출처 : https://shinejaram.tistory.com/m/64

'Front-end > React' 카테고리의 다른 글

React - useFetch란?  (0) 2021.06.28
React - useReducer란?  (0) 2021.06.24
React - controlled-input  (0) 2021.06.22
React - removeEventListener  (0) 2021.06.18
React - useEffect : github user profile 만들기  (0) 2021.06.18