useRef는 .current 프로퍼티로 전달된 인자(initialValue)로 초기화된 변경 가능한 ref 객체를 반환
저장공간 또는 DOM 요소에 접근하기 위해 사용되는 React Hook
DOM 엘리먼트의 주소값을 활용해야 하는 경우 DOM 노드, 엘리먼트, React 컴포넌트 주소값을 참조할 때 사용.
(제시된 상황을 제외한 대부분의 경우, useRef의 사용은 React의 특징이자 장점인 선언형 프로그래밍 원칙과 배치되기 때문에 주의해서 사용해야 함)
const 주소값을_담는_그릇 = useRef(참조자료형)
return (
<div>
<input ref={주소값을_담는_그릇} type="text" />
</div>
);
/* 사용 예시 */
function TextInputWithFocusButton() {
const inputEl = useRef(null);
const onButtonClick = () => {
inputEl.current.focus();
};
return (
<>
<input ref={inputEl} type="text" />
<button onClick={onButtonClick}>Focus the input</button>
</>);
}
컴포넌트 별로 특정 데이터를 가지게 하고, 이러한 데이터를 리렌더링 없이 관리하고 싶을 때
import React, { useState, useRef } from 'react';
function App() {
const [name, setName] = useState('');
const inputRef = useRef('');
const onSet = () => {
setName(inputRef.current.value);
};
return (
<div>
<input ref={inputRef} />
<button onClick={onSet}>Submit</button>
</div>
);
}
이 경우 onChange 이벤트에 useState를 바로 사용했을 때와 달리 리렌더링이 버튼을 클릭했을 때 한 번만 일어남.