728x90
반응형
useRef는 리액트에서 제공하는 훅 중 하나인데 useState와 비교가 많이 되는 훅인 것 같다.
함수형 컴포넌트에서 특정 DOM 요소나 값을 참조할 수 있게 해주는 useRef를 오늘 알아보자!
useRef
- DOM 요소 접근
- 특정 DOM 요소에 접근하거나 조작할 때 사용되는데, 직접 DOM 요소에 접근하여 원하는 작업을 수행할 수 있다
- querySelector처럼 요소에 접근이 가능
- 값 저장
- 렌더링 사이에 값을 저장하고 싶을 때 사용되고,. 리렌더링이 발생해도 유지된다.
- 컴포넌트가 리렌더링될 때마다 초기화되지 않고, 지속적으로 유지되어야 하는 값을 저장하는 데 사용
useRef의 기본 사용법
//ref 사용
const myRef = useRef(initialValue);
myRef.current
initialValue는 참조 객체의 초기값.
리액트는 useRef를 호출할 때마다 동일한 참조 객체를 반환하는데 current라는 속성을 가지며,
이 속성을 통해 참조하는 값이나 DOM 요소에 접근할 수 있다
- DOM 요소 접근
- 특정 입력 필드에 포커스를 설정하거나, 스크롤 위치를 조정하는 등의 작업을 할 때 사용.
import React, { useRef } from 'react';
function TextInputWithFocusButton() {
const inputEl = useRef(null);
//함수가 실행되면 포커스 주기
const onButtonClick = () => {
inputEl.current.focus();
};
return (
<>
//input을 참조
<input ref={inputEl} type="text" />
<button onClick={onButtonClick}>Focus the input</button>
</>
);
}
export default TextInputWithFocusButton;
input 요소에 useRef를 사용하여 참조를 설정
버튼 클릭 시 해당 입력 필드에 포커스를 설정
사용자는 버튼을 클릭하면 자동으로 입력 필드에 포커스가 이동하게 됨
ex)이메일을 안적었는데 제출하기 버튼을 눌렀네? 이메일 입력란으로 포커싱!!
- 렌더링 사이에 값 저장
- useRef`는 렌더링 사이에 값을 저장할 때도 사용
- 컴포넌트가 리렌더링되더라도 유지되며, 값의 변경이 리렌더링을 일으키지 않는다!
import React, { useRef, useEffect } from 'react';
function TimerComponent() {
const intervalRef = useRef();
useEffect(() => {
const id = setInterval(() => {
// 타이머 로직
console.log('Tick');
}, 1000);
//Ref에 인터벌 아이디를 할당
intervalRef.current = id;
return () => {
//언마운트 되기전 클리어 인터벌
clearInterval(intervalRef.current);
};
}, []);
return <div>Timer</div>;
}
export default TimerComponent;
setInterval로 생성한 타이머 ID를 useRef에 저장하고, 컴포넌트가 언마운트될 때 정리
컴포넌트가 언마운트될 때 타이머를 정리하여 메모리 누수를 방지
컴포넌트의 생명주기 동안 유지되어야 하는 값이나 객체를 관리하는 데 매우 응용할 수 있다.
요약)
- useRef는 React에서 DOM 요소나 값을 참조할 때 사용
- DOM 요소에 접근하거나 렌더링 사이에 값을 유지
- .current 속성을 통해 참조에 접근
- 값의 변경이 리렌더링을 일으키지 않음
useState와 useRef의 차이점
- useState는 상태가 변경될 때마다 컴포넌트를 리렌더링 / useRef는 상태 변경이 컴포넌트의 리렌더링 일으키지 않는다.
- useState는 UI 상태의 변경을 관리하는 데 사용 / useRef는 DOM 요소에 접근하거나 렌더링 사이에 값을 유지해야 할 때 사용
- useState를 사용하면 상태를 업데이트하기 위해 설정 함수를 사용(setState()) / useRef는 .current 속성을 직접 변경하여 값을 업데이트
반응형
'WebDev > React-Next' 카테고리의 다른 글
next/dynamic과 Lazy Loading을 알아보자 (0) | 2024.06.13 |
---|---|
Next의 Link 컴포넌트에 대해 알아보자 (0) | 2024.06.12 |
React(리액트)의 Props를 공부해보자 (0) | 2024.06.01 |
React(리액트)의 useState를 공부하자! 기초니까! (0) | 2024.05.31 |
React 라이프 사이클(생명주기)을 공부하자 feat: useEffect() (0) | 2024.05.30 |