useRef는 React에서 제공하는 훅 중 하나로, 주로 두 가지 목적으로 사용된다.
첫째, DOM 요소에 직접 접근할 때 사용되며, 둘째, 렌더링 사이에 데이터를 유지할 때 사용된다.
useRef는 .current프로퍼티에 변경 가능한 값을 보관하는 "상자"와 같은 객체를 반환한다. 이 값은 컴포넌트의 생명주기 동안 변경될 수 있으며, 값이 변경되어도 컴포넌트가 재랜더링되지 않는다.
좀 더 쉽게 이해하기 위해 좋은 비유는 "개인 금고"이다. 생각해보자. 금고 안에는 중요한 것을 넣어두고, 필요할 때마다 꺼내 쓸 수 있다. 그리고 금고 내용물을 바꿔도, 금고 자체의 위치나 존재에는 영향을 미치지 않는다. 이와 비슷하게, useRef는 React 컴포넌트에서 "금고" 역할을 한다.
useRef의 기본 개념
* 금고 생성 : useRef를 호출할 때, React는 변경 가능한 "금고" 객체를 생성한다. 이 객체는 .current 프로퍼티를 가지고 있다. 이 .current 프로퍼티가 바로 값을 저장하는 곳이다.
const myRef = useRef(initialValue);
* 값 저장 : .current 프로퍼티에는 어떤 값이든 저장할 수 있다. 이 값은 컴포넌트의 라이프사이클이 동안 유지되며, 변경 가능하다. 이를 통해 금고 안에 중요한 물건(데이터)을 보관할 수 있다.
myRef.current = 42; // 금고 안에 값 저장
* 재렌더링 없음 : myRef.current의 값을 변경해도, 컴포넌트는 재렌더링되지 않는다. 금고 내용물을 바꿔도, 금고의 위치나 존재에 영향을 주지 않는 것처럼 말이다. 이는 useState와 다른 점이다. useState를 사용하여 상태를 변경하면, 그 변경 사항을 반영하기 위해 컴포넌트가 재렌더링된다.
DOM 요소 접근
useRef를 사용하여 DOM 요소에 직접 접근할 수 있다. 예를 들어, 특정 DOM 요소의 크기를 읽거나, 직접 입력 필드를 포커스하거나, 다른 DOM API를 사용해야 할 때 유용하다. 이는 ref 속성을 통해 DOM 요소에 대한 참조를 생성하고, 해당 참조를 통해 요소에 접근할 수 있게 해준다!
사용 예시
function TextInputWithFocusButton() {
const inputEl = useRef(null);
const onButtonClick = () => {
// `.current`는 입력 요소의 실제 DOM 노드를 가리킵니다.
inputEl.current.focus(); // 입력 필드에 포커스
};
return (
<>
<input ref={inputEl} type="text" />
<button onClick={onButtonClick}>Focus the input</button>
</>
);
}
사용 예시
- input창에서 파일을 업로드하고 싶지 않고 위의 이미지 태그를 누르면 input창의 역할을 하도록 하고 싶음
const fileInputRef = useRef(null);
const triggerFileInput = () => {
fileInputRef.current.click(); // 파일 입력 참조를 사용하여 클릭 이벤트 트리거
};
<div> // 이미지 태그
<FcAddImage
className='w-full h-full'
onClick={triggerFileInput}
/>
</div>
<form>
<input
type='file'
ref={fileInputRef} // ref 속성으로 참조 연결
style={{ display: 'none' }} // 입력 필드 숨기기
/>
</form>
'React' 카테고리의 다른 글
리액트에서 Key란? (1) | 2024.04.19 |
---|---|
리액트의 렌더링이란 (1) | 2024.04.19 |
React의 성능 최적화를 위한 훅에 대해서 (0) | 2024.03.28 |
의존성 주입이란? (0) | 2024.01.25 |
Params에 대해 설명해보시오. (1) | 2024.01.25 |