
React에서 상태를 관리하는 방법에는 여러 가지가 있지만,
useState와useReducer는 가장 많이 사용되는 두 가지 훅입니다.
이 둘은 비슷하게 보일 수 있지만, 각각의 사용 목적과 특징이 다릅니다.
이번 포스트에서는useState와useReducer를 비교하며, 언제 각 훅을 사용하는 것이 적합한지에 대해 알아보겠습니다.
useStateuseState는 React 컴포넌트 내에서 간단한 상태를 관리할 수 있는 훅입니다. 상태 값과 그 상태를 변경하는 함수를 반환하여, 상태를 직접 관리할 수 있게 해줍니다.
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
const increment = () => {
setCount(count + 1);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>Increment</button>
</div>
);
}
useState는 간단한 값 하나를 관리할 때 적합합니다.useState는 상태값과 이를 갱신하는 함수를 함께 반환합니다.useReduceruseReducer는 상태 업데이트가 복잡할 때 사용되는 훅입니다. 여러 가지 상태를 하나의 객체로 관리하거나, 상태 변화가 여러 가지 조건에 따라 달라져야 할 때 유용합니다. 리듀서 함수와 액션 객체를 사용하여 상태를 업데이트합니다.
import React, { useReducer } from 'react';
const initialState = { count: 0 };
function reducer(state, action) {
switch (action.type) {
case 'increment':
return { count: state.count + 1 };
case 'decrement':
return { count: state.count - 1 };
default:
return state;
}
}
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
<button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
</div>
);
}
switch문으로 명확하게 정의할 수 있습니다.useState vs useReducer 비교| 특성 | useState | useReducer |
|---|---|---|
| 상태 관리 방식 | 단일 값 관리 | 여러 값이나 복잡한 상태 관리 |
| 상태 업데이트 방식 | 직접 상태 값 설정 | reducer 함수와 액션 객체를 통한 상태 업데이트 |
| 디버깅 용이성 | 간단한 상태 업데이트에 용이 | 상태 변화 로직을 명확하게 분리 가능 |
| 복잡한 상태 로직 | 상태 로직이 단순할 때 사용 | 상태 로직이 복잡하거나 여러 상태가 연관될 때 사용 |
| 사용 예시 | 카운터, 폼 입력 등 간단한 상태 관리 | 복잡한 애플리케이션 상태 관리 |
useState를 사용해야 할까요?useState가 매우 직관적이고 간결합니다.useState가 더 간단하고, 코드가 깔끔해집니다.useReducer를 사용해야 할까요?useReducer가 적합합니다.useReducer는 코드가 더욱 명확하고 관리하기 쉬워집니다.useState와 useReducer는 각각의 특성에 맞게 사용해야 합니다.
useState는 간단한 상태를 다룰 때 적합하고, useReducer는 상태가 복잡하거나 여러 액션에 따라 변화하는 상태를 관리할 때 유용합니다. 각각의 상황에 맞는 훅을 선택하여, 더 깔끔하고 효율적인 상태 관리가 가능하므로, 필요에 맞게 잘 활용해 보세요!