리액트를 사용하다 보면 컴포넌트의 상태를 관리하기 위해
useState
와useRef
라는 훅을 자주 접하게 된다. 두 훅은 모두 상태 관리와 관련이 있지만, 그 목적과 동작 방식이 크게 다르다. 이번 주제에서는useState
와useRef
의 차이점과 사용 사례를 자세히 알아보려고 한다!
: useState
는 리액트에서 상태를 관리하기 위한 가장 기본적인 훅이다. ① 상태 값과 ② 그 상태를 변경하는 함수를 제공하며, 상태가 변경될 때마다 컴포넌트가 리렌더링된다.
import { useState } from 'react';
function InputExample() {
const [value, setValue] = useState('');
return (
<input
type="text"
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
}
function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
Count: {count}
</button>
);
}
: useRef
는 컴포넌트의 상태를 저장하지만, 상태 변경이 컴포넌트를 리렌더링하지는 않는다. 주로 DOM 요소에 접근하거나 이전 값을 저장하는 데 사용된다.
import { useRef, useEffect } from 'react';
function FocusInput() {
const inputRef = useRef(null);
useEffect(() => {
inputRef.current.focus();
}, []);
return <input ref={inputRef} type="text" />;
}
import { useRef, useEffect } from 'react';
function PreviousValue({ value }) {
const prevValue = useRef();
useEffect(() => {
prevValue.current = value;
}, [value]);
return (
<div>
Current: {value}, Previous: {prevValue.current}
</div>
);
}
: useState
와 useRef
의 가장 큰 차이점은 렌더링에 미치는 영향이다.
useState
: 상태가 변경되면 컴포넌트가 다시 렌더링된다.useRef
: 값이 변경되어도 컴포넌트는 다시 렌더링되지 않는다.import { useState, useRef } from 'react';
function Example() {
const [state, setState] = useState(0);
const ref = useRef(0);
const updateState = () => setState(state + 1);
const updateRef = () => ref.current += 1;
console.log('Component rendered');
return (
<div>
<button onClick={updateState}>Update State</button>
<button onClick={updateRef}>Update Ref</button>
</div>
);
}
updateState
버튼을 클릭하면 컴포넌트가 다시 렌더링되지만, updateRef
버튼은 렌더링에 영향을 주지 않는다.useState
를 선택할 때useRef
를 선택할 때
useState
와useRef
는 각각의 용도와 특징이 명확한 훅이다.useState
는 상태 변경과 함께 컴포넌트를 재렌더링하며, UI 업데이트를 다룰 때 적합하다. 반면useRef
는 렌더링 없이 값을 저장하거나 DOM 요소에 접근할 때 유용하다. 두 훅의 차이점을 이해하고 적절히 활용하면 리액트 애플리케이션의 성능과 유지보수성을 크게 향상시킬 수 있다.이렇게 개념만 읽어보면 확실히 두 개의 차이점을 알겠는데,. 실제 구현해야 하는 기능별로 생각해보면 또 감이 안 온다. 재밌게 읽은 글들을 남기고.. . 아디오스..