# useState를 사용해야만 렌더링되는 이유
React에서 useState를 사용해야만 컴포넌트가 다시 렌더링되는 이유는 React의 렌더링 메커니즘과 밀접한 관련이 있습니다. 이를 이해하기 위해 몇 가지 핵심 개념을 살펴보겠습니다.
1. React의 렌더링 원칙
React는 다음 두 가지 경우에 컴포넌트를 다시 렌더링합니다:
- 컴포넌트의 state가 변경될 때
- 부모 컴포넌트가 리렌더링될 때
2. 일반 변수 vs useState
일반 변수를 사용하여 상태를 관리하려고 하면, React는 이 변화를 감지하지 못합니다.
function Counter() {
let count = 0; // 일반 변수
const increment = () => {
count++; // 이 변경은 리렌더링을 트리거하지 않습니다
console.log(count);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>Increment</button>
</div>
);
}
위 예제에서 버튼을 클릭해도 화면에 표시되는 숫자는 변하지 않습니다. 콘솔에서는 숫자가 증가하는 것을 볼 수 있지만, React는 이 변화를 인식하지 못해 컴포넌트를 다시 렌더링하지 않습니다.
3. useState의 역할
useState 훅은 두 가지 중요한 역할을 합니다:
- 상태 값을 저장합니다.
- 상태 업데이트 함수를 제공하여 React에게 상태 변경을 알립니다.
function Counter() {
const [count, setCount] = useState(0); // useState 사용
const increment = () => {
setCount(count + 1); // 이 호출은 리렌더링을 트리거합니다
};
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>Increment</button>
</div>
);
}
이 예제에서 setCount를 호출하면 React는 상태 변경을 인식하고 컴포넌트를 다시 렌더링합니다.
4. 왜 useState인가?
- 상태 추적: React는 useState를 통해 관리되는 상태를 추적할 수 있습니다.
- 최적화: React는 어떤 상태가 변경되었는지 정확히 알기 때문에, 필요한 부분만 효율적으로 업데이트할 수 있습니다.
- 일관성: 함수형 컴포넌트에서 상태를 관리하는 표준화된 방법을 제공합니다.
- 비동기 업데이트 처리: React는 상태 업데이트를 비동기적으로 처리하며, useState는 이를 올바르게 다룰 수 있게 해줍니다.
결론
useState를 사용하면 React의 상태 관리 시스템과 연동되어 컴포넌트의 상태 변화를 정확히 추적하고 필요할 때 리렌더링을 트리거할 수 있습니다. 이는 React 애플리케이션의 성능과 일관성을 유지하는 데 중요한 역할을 합니다.