지영이의 개발 블로그

[useRef]useRef 로 특정 DOM 선택하기 본문

React/React Hooks

[useRef]useRef 로 특정 DOM 선택하기

이지영 2022. 7. 2. 15:45

 

React 컴포넌트는 기본적으로 내부 상태(state)가 변할 때 마다 다시 랜더링(rendering)이 됩니다.

불필요한 렌더링을 막기위해 ref 안에 값을 저장해두면 ref 안에 있는 값을 아무리 변경도 컴포넌트를 렌더링 하지않는다.

 

즉 변경시 렌더링을 발생시키 않는 값을 다룰때 편리하게 사용할 수 있다 

useRef 로 특정 DOM 선택하기

리액트를 사용하는 프로젝트에서도 가끔씩 DOM 을 직접 선택해야 하는 상황이 발생 할 때도 있습니다. 예를 들어서 특정 엘리먼트의 크기를 가져와야 한다던지, 스크롤바 위치를 가져오거나 설정해야된다던지, 또는 포커스를 설정해줘야된다던지 등 정말 다양한 상황이 있습니다.

그럴 땐, 리액트에서 ref 라는 것을 사용합니다.

함수형 컴포넌트에서 ref 를 사용 할 때에는 useRef 라는 Hook 함수를 사용합니다. 

import { useRef } from "react";
        
const inputRef = useRef();

  useEffect(() => {
    inputRef.current.focus();
  	}, []);
        
 	<input
   onChange={(e) => {
            입력값변경(e.target.value);
          }}
          ref={inputRef}
          value={입력값}
          placeholder="검색하세용"
 	></input>

 

useRef() 를 사용하여 Ref 객체를 만들고, 이 객체를 우리가 선택하고 싶은 DOM 에 ref 값으로 설정해주어야 합니다. 그러면, Ref 객체의 .current 값은 우리가 원하는 DOM 을 가르키게 됩니다.

위 예제에서는 onReset 함수에서 input 에 포커스를 하는 focus() DOM API 를 호출해주었습니다.

이제 브라우저에서 인풋에 값을 입력한 다음에 초기화를  누르면 input에 focus가 잡힘 !

'React > React Hooks' 카테고리의 다른 글

[React]useReducer  (0) 2022.08.28
[React]Custom hooks  (0) 2022.08.24
[React]컴포넌트 성능 최적화(useMemo , useCallback, React.Memo)  (0) 2022.07.15
Comments