useRef
- state와 비슷하게 값을 저장하는 저장공간으로 쓰일 수 있다.
- 값이 변화되지 않고 불필요한 렌더링을 막을 때 쓰일 수 있다.
- DOM 요소에 접근하여 Document.querySelector();와 같은 조작을 할 수 있다.
기본 반환 형태
const ref = useRef("value");
console.log(ref); // current:value;
- 반환된 ref는 컴포넌트의 전 생애 주기를 통해 유지된다.
- 컴포넌트가 unmount 되기 전까지 값을 유지한다.
state와 Ref의 차이
- state : state의 값에 변화가 생기면 컴포넌트가 렌더링이 되고 내부 변수가 초기화된다.
- ref : ref의 값에 변화가 생겨도 다시 렌더링되지 않고 값이 유지된다.
state
const [count, setCount] = useState(0);
console.log("state", count);
const increaseCountState = () => {
setCount(count + 1);
}
- state의 값에 변화가 일어날 때 마다 렌더링이 되며 console.log가 찍히게 된다.
ref
const countRef = userRef(0);
console.log("ref", countRef);
const increaseCountRef = () => {
countRef.current = countRef.current + 1;
}
- countRef의 값이 변화되어도 브라우저 상에서 업데이트가 되지 않고 console.log가 찍히지 않는다.
- state 등에 의해 재렌더링이 될 때 ref 값도 브라우저 상에서 업데이트가 되고 console.log가 찍힌다.
- ref는 값은 변화되지만 업데이트가 되지 않고 불필요한 렌더링이 일어나지 않아야할 때 쓰면 좋다.
DOM 접근하기
태그에 참조하기
const inputRef = useRef();
useEffect(()=>{
console.log(inputRef);
},[])
return (
<input ref={inputRef} />
)
- 태그에 ref 속성을 사용하여 useRef를 할당한 변수를 넣어준다.
ref.current 이벤트 속성 (추후 작성)