Frontend/ReactJS

useRef

findmypiece 2021. 3. 3. 11:16
728x90

1. 함수형 컴포넌트에서 DOM을 직접 참조할 수 있는 방법을 제공하며

   전역적으로 동작하는게 아니라 컴포넌트 내부에서만 작동한다.

2. 기본적인 사용법은 useRef()를 통해 ref 인스턴스를 만든 뒤에

   DOM의 ref로 해당 인스턴스 변수를 지정하면 된다.

3. 이렇게 ref에 연결된 DOM은 ref.current 로 접근할 수 있다.

4. 주의할 점은 useRef()로 만들어지는 인스턴스는 처음에는 아무것도 참조하지 않는

   undefined 상태이고 DOM의 ref 키워드로 useRef() 로 만든 변수를

   지정해야 그제서야 해당 DOM을 참조하게 된다.

   즉, 일단 정상적으로 초기 렌더링이 되어야 해당 DOM을 ref.current 으로 접근할 수 있다.

5. 한번 연결된 ref는 React 에 의해 기억되기 때문에

   ref.current 값을 직접 수정하지 않는 이상 해당 컴포넌트가 리렌더링 되더라도 값이 유지된다.

   즉, ref는 컴포넌트가 리렌더링 되더라도 유지하고 싶은 값을 정의할 때 사용하면 된다.

6. 헷갈리지 말아야 할 것은 리렌더링과 화면 새로고침은 전혀 다른 개념이다.

   리렌더링은 컴포넌트에만 국한된 새로고침이기 때문에 ref 값이 유지될 수 있지만

   화면 새로고침은 React 자체가 새로 구성되어 초기렌더링이 수행되는 것이기 때문에

   당연히 이때는 ref 값도 초기화된다.

7. ref 값을 처음부터 무언가를 참조하는 인스턴스로 만들 수도 있다.

   useRef(1) 와 같이 인자를 추가해서 인스턴스를 생성할 경우

   인자로 추가된 값을 참조하는 인스턴스로 생성되어 ref.current 로 바로 접근할 수 있다.

   이를 통해 리렌더링시에도 유지되는 로컬변수로 활용될 수 있다.

 

8. useRef로 선언한 값은 변경되더라도 컴포넌트가 리렌더링 되지 않기 때문에

    로컬변수로는 활용될 수 있어도 리렌더링을 위한 상태값으로 활용될 수는 없다.

사용법은 대략 아래와 같다.

import React, {useRef} from 'react';

const InputSample () => {
   const id = useRef(1); //로컬변수로 활용
   const nameInput = useRef(); //DOM참조

   return(
      <input ref={nameInput} />
   );
}

export default InputSample;
728x90

'Frontend > ReactJS' 카테고리의 다른 글

mac+intellij 에서 리액트 시작하기...  (0) 2021.03.03
컴포넌트 성능 최적화  (0) 2021.03.03
컴포넌트 업데이트? 리렌더링?  (0) 2021.03.03
<React.StrictMode></React.StrictMode>  (0) 2021.03.03
JSX 문법 주의사항  (0) 2021.03.03